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:
- Executar uma consulta para obter as versões mais recentes dos documentos
- Criar uma exibição materializada das versões mais recentes dos documentos
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 você usou marcadores suaves para marcar documentos excluídos, poderá filtrá-los com a seguinte consulta:
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