Partager via


Obtenir les dernières versions des documents Azure Cosmos DB

Dans cet article, vous allez apprendre à obtenir la dernière version des documents ingérés.

Obtenir les dernières versions des documents

Chaque fois qu’une mise à jour de document est ingérée à partir du flux de modification, une nouvelle ligne est ajoutée dans la table cible. Au fur et à mesure, la table crée un historique de chaque document dans le conteneur Cosmos DB correspondant. Une exigence typique consiste à interroger la dernière version d’un document, qui correspond à l’obtention de l’état actuel du conteneur Cosmos DB.

Vous pouvez utiliser les méthodes suivantes pour interroger l’état actuel dans votre table :

Dans les exemples, vous allez obtenir les dernières versions du document en résumant la table par la colonne ID à l’aide de la fonction arg_max sur la colonne _timestamp pour afficher uniquement les lignes avec les horodatages les plus récents.

Remarque

La colonne _timestamp est créée à partir de la propriété _ts des documents Cosmos DB ingérés. La conversion de DateTimeFromUnixSeconds (_ts) en datetime (_timestamp) est effectuée par le mappage de table d’ingestion configuré pour la table. Les données converties dans la colonne _timestamp rendent les requêtes et les vues matérialisées plus performantes que l’utilisation de la valeur DateTimeFromUnixSeconds _ts native.

Exécuter une requête pour obtenir les dernières versions des documents

Exécutez la requête suivante pour obtenir les dernières versions des documents :

TestTable
| summarize arg_max(_timestamp, *) by Id

Si vous avez utilisé des marqueurs réversibles pour marquer les documents effacés, vous pouvez les filtrer avec la requête suivante :

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

Créer une vue matérialisée des dernières versions des documents

Si votre conteneur Cosmos DB présente beaucoup de mises à jour, la requête permettant d’obtenir les dernières versions des documents peut être lente. Les vues matérialisées ont généralement de meilleures performances qu’une requête si les mises à jour sont nombreuses. Si la requête est fréquemment exécutée, l’utilisation d’une vue matérialisée peut être avantageuse et vous faire faire des économies.

Exécutez la commande suivante pour créer une vue matérialisée des dernières versions des documents :

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

Dans une vue matérialisée, vous ne pouvez pas filtrer sur nos marqueurs réversibles dans le cadre de sa requête. Par conséquent, pour supprimer les documents effacés qui sont indiqués par des marqueurs réversibles, interrogez la vue matérialisée et filtrez sur les résultats, comme suit :

LatestDocuments
| where not(IsDeleted)

Si vous le souhaitez, encapsulez la requête filtrée dans une fonction stockée et appelez-la pour obtenir les derniers résultats filtrés, comme suit :

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

LatestDocumentsDeletedRemoved
| summarize sum(Salary) by Area