Ottenere le versioni più recenti dei documenti di Azure Cosmos DB
In questo articolo si apprenderà come ottenere la versione più recente dei documenti inseriti.
Ottenere le versioni più recenti dei documenti
Ogni volta che un aggiornamento del documento viene inserito dal feed di modifiche, viene aggiunta una nuova riga nella tabella di destinazione. Nel corso del tempo, la tabella crea una cronologia di ogni documento nel contenitore Cosmos DB corrispondente. Un requisito tipico è eseguire una query sulla versione più recente di un documento, corrisponde a ottenere lo stato corrente del contenitore Cosmos DB.
È possibile usare i modi seguenti per eseguire una query sullo stato corrente dalla tabella:
- Eseguire una query per ottenere le versioni più recenti dei documenti
- Creare una visualizzazione materializzata delle versioni più recenti dei documenti
Negli esempi si otterranno le versioni più recenti del documento riepilogando la tabella in base alla colonna ID , usando la funzione arg_max nella colonna _timestamp per visualizzare solo le righe con i timestamp più recenti.
Nota
La colonna _timestamp viene creata dalla proprietà _ts dei documenti di Cosmos DB inseriti. La conversione da DateTimeFromUnixSeconds
(_ts) a datetime
(_timestamp) viene eseguita dal mapping della tabella di inserimento configurato per la tabella. I dati convertiti nella colonna _timestamp rendono le query e le viste materializzate più efficienti rispetto all'uso del valore _ts nativo DateTimeFromUnixSeconds
.
Eseguire una query per ottenere le versioni più recenti dei documenti
Eseguire la query seguente per ottenere le versioni più recenti dei documenti:
TestTable
| summarize arg_max(_timestamp, *) by Id
Quando si utilizzano marcatori morbidi per indicare i documenti eliminati, è possibile filtrare questi documenti con una query. Ad esempio, se si utilizza una proprietà booleana denominata IsDeleted
che indica i documenti eliminati, è possibile utilizzare la seguente query per escludere i documenti eliminati temporaneamente:
TestTable
| summarize arg_max(_timestamp, *) by Id
| where not(IsDeleted)
Creare una visualizzazione materializzata delle versioni più recenti dei documenti
Se il contenitore Cosmos DB ha molti aggiornamenti, la query per ottenere le versioni più recenti dei documenti può essere lenta. Le viste materializzate hanno in genere prestazioni migliori rispetto a una query se sono presenti molti aggiornamenti. Se la query viene eseguita di frequente, l'uso di una vista materializzata può essere vantaggioso e risparmiare sui costi.
Eseguire il comando seguente per creare una visualizzazione materializzata delle versioni più recenti dei documenti:
.create materialized-view LatestDocuments on table TestTable
{
CosmosChangeFeed1
| summarize arg_max(_timestamp, *) by Id
}
In una vista materializzata non è possibile filtrare i marcatori soft come parte della query. Pertanto, per rimuovere i documenti eliminati indicati da marcatori soft, eseguire una query sulla vista materializzata e filtrare i risultati, come indicato di seguito:
LatestDocuments
| where not(IsDeleted)
Facoltativamente, incapsulare la query filtrata in una funzione archiviata e chiamarla per ottenere i risultati filtrati più recenti, come indicato di seguito:
.create function LatestDocumentsDeletedRemoved(){
LatestDocuments
| where not(IsDeleted)
}
LatestDocumentsDeletedRemoved
| summarize sum(Salary) by Area