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:
- Executar uma consulta para obter as versões mais recentes dos documentos
- Criar uma vista materializada das versões mais recentes dos documentos
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