Condividi tramite


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 tempo, la tabella crea una cronologia di ogni documento nel contenitore Cosmos DB corrispondente. Un requisito tipico consiste nell'eseguire una query sulla versione più recente di un documento, corrisponde al recupero dello stato corrente del contenitore Cosmos DB.

È possibile usare i modi seguenti per eseguire query sullo stato corrente dalla tabella:

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 visualizzazioni materializzate più efficienti rispetto all'uso del valore di _ts nativoDateTimeFromUnixSeconds.

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

Se sono stati usati marcatori soft per contrassegnare i documenti eliminati, è possibile filtrarli con la query seguente:

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 visualizzazioni materializzate in genere hanno prestazioni migliori rispetto a una query se sono presenti molti aggiornamenti. Se la query viene eseguita di frequente, l'uso di una visualizzazione materializzata può essere utile 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 visualizzazione materializzata non è possibile filtrare i marcatori soft come parte della query. Pertanto, per rimuovere documenti eliminati indicati da marcatori soft, eseguire query sulla visualizzazione 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