Compartilhar via


Obter versões mais recentes de documentos do Azure Cosmos DB

Neste artigo, você aprenderá como obter a versão mais recente dos documentos ingeridos.

Obter as versões mais recentes dos documentos

Toda vez que uma atualização de documento é ingerida a partir do feed de alterações, uma nova linha é adicionada à tabela de destino. Com o tempo, a tabela criará um histórico de cada documento no contêiner correspondente do Cosmos DB. Um requisito típico é consultar a versão mais recente de um documento, o que corresponde a obter o estado atual do contêiner do Cosmos DB.

Você pode usar as seguintes maneiras para consultar o estado atual da sua tabela:

Nos exemplos, você obterá as versões mais recentes do documento resumindo a tabela pela coluna ID, usando a função arg_max na coluna _timestamp para exibir apenas as linhas com os carimbos de data/hora mais recentes.

Observação

A coluna _timestamp é criada a partir da propriedade _ts dos documentos ingeridos do Cosmos DB. A conversão de DateTimeFromUnixSeconds (_ts) para datetime (_timestamp) é realizada pelo mapeamento da tabela de ingestão configurado para a tabela. Os dados convertidos na coluna _timestamp tornam as consultas e exibições materializadas mais eficientes do que usar o valor nativo DateTimeFromUnixSeconds_ts.

Execute uma consulta para obter as versões mais recentes dos documentos

Execute a seguinte consulta para obter as versões mais recentes dos documentos:

TestTable
| summarize arg_max(_timestamp, *) by Id

Se usar marcadores suaves para indicar documentos excluídos, você poderá filtrar esses documentos com uma consulta. Por exemplo, se você usar uma propriedade booliana chamada IsDeleted que indica documentos excluídos, você poderá usar a seguinte consulta para filtrar os documentos excluídos:

TestTable
| summarize arg_max(_timestamp, *) by Id
| where not(IsDeleted)

Criar uma exibição materializada das versões mais recentes dos documentos

Se o seu contêiner do Cosmos DB tiver muitas atualizações, a consulta para obter as versões mais recentes dos documentos pode ser lenta. As exibições materializada geralmente têm melhor desempenho do que uma consulta se houver muitas atualizações. Se a consulta for executada com frequência, o uso de uma exibição materializada pode ser vantajoso e economizar custos.

Execute o comando a seguir para criar uma exibição materializada das versões mais recentes dos documentos:

.create materialized-view LatestDocuments on table TestTable
{
    CosmosChangeFeed1
    | summarize arg_max(_timestamp, *) by Id
}

Em uma exibição materializada, não é possível filtrar nossos marcadores de software como parte da consulta. Portanto, para remover os documentos excluídos indicados por marcadores de software, consulte a exibição materializada e filtre os resultados da seguinte forma:

LatestDocuments
| where not(IsDeleted)

Opcionalmente, encapsule a consulta filtrada em uma função armazenada e chame-a para obter os últimos resultados filtrados, como segue:

.create function LatestDocumentsDeletedRemoved(){
    LatestDocuments
    | where not(IsDeleted)
}

LatestDocumentsDeletedRemoved
| summarize sum(Salary) by Area