Partilhar via


Obter as versões mais recentes dos documentos do Azure Cosmos DB

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

Obter as versões mais recentes dos documentos

Sempre que uma atualização de documento é ingerida a partir do feed de alterações, é adicionada uma nova linha na tabela de destino. Ao longo do tempo, a tabela cria um histórico de cada documento no contentor do Cosmos DB correspondente. Um requisito típico é consultar a versão mais recente de um documento, que corresponde a obter o estado atual do contentor do Cosmos DB.

Pode utilizar as seguintes formas de consultar o estado atual a partir da tabela:

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

Nota

A coluna _timestamp é criada a partir da propriedade _ts de documentos do Cosmos DB ingeridos. A conversão de DateTimeFromUnixSeconds (_ts) para datetime (_timestamp) é efetuada pelo mapeamento da tabela de ingestão configurado para a tabela. Os dados convertidos na coluna _timestamp tornam as consultas e as vistas materializadas mais eficazes do que utilizar o valor de _ts nativoDateTimeFromUnixSeconds.

Executar 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 utilizou marcadores suaves para marcar documentos eliminados, pode filtre-os com a seguinte consulta:

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

Criar uma vista materializada das versões mais recentes dos documentos

Se o contentor do Cosmos DB tiver muitas atualizações, a consulta para obter as versões mais recentes dos documentos pode ser lenta. Geralmente, as vistas materializadas têm um melhor desempenho do que uma consulta se existirem muitas atualizações. Se a consulta for executada frequentemente, utilizar uma vista materializada pode ser vantajoso e poupar custos.

Execute o seguinte comando para criar uma vista materializada das versões mais recentes dos documentos:

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

Numa vista materializada, não pode filtrar os nossos marcadores suaves como parte da consulta. Por conseguinte, para remover documentos eliminados indicados por marcadores suaves, consulte a vista materializada e filtre os resultados da seguinte forma:

LatestDocuments
| where not(IsDeleted)

Opcionalmente, encapsular a consulta filtrada numa função armazenada e chamá-la para obter os resultados filtrados mais recentes, da seguinte forma:

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

LatestDocumentsDeletedRemoved
| summarize sum(Salary) by Area