Sdílet prostřednictvím


Získání nejnovějších verzí dokumentů Azure Cosmos DB

V tomto článku se dozvíte, jak získat nejnovější verzi přijatých dokumentů.

Získání nejnovějších verzí dokumentů

Pokaždé, když se aktualizace dokumentu ingestuje z kanálu změn, přidá se do cílové tabulky nový řádek. V průběhu času vytvoří tabulka historii každého dokumentu v odpovídajícím kontejneru Cosmos DB. Typickým požadavkem je dotazování na nejnovější verzi dokumentu, který odpovídá získání aktuálního stavu kontejneru Cosmos DB.

K dotazování aktuálního stavu z tabulky můžete použít následující způsoby:

V příkladech získáte nejnovější verze dokumentu souhrnem tabulky podle sloupce ID pomocí funkce arg_max ve sloupci _timestamp a zobrazí se jenom řádky s nejnovějšími časovými razítky.

Poznámka:

Sloupec _timestamp se vytvoří z vlastnosti _ts přijatých dokumentů Cosmos DB. Převod z (_ts) na DateTimeFromUnixSeconds (_timestamp) provádí mapovánídatetimedat nakonfigurované pro tabulku. Převedená data ve sloupci _timestamp činí dotazy a materializovaná zobrazení výkonnější než použití nativní DateTimeFromUnixSeconds.

Spuštěním dotazu získejte nejnovější verze dokumentů.

Spuštěním následujícího dotazu získejte nejnovější verze dokumentů:

TestTable
| summarize arg_max(_timestamp, *) by Id

Pokud používáte měkké značky k označení odstraněných dokumentů, můžete tyto dokumenty vyfiltrovat pomocí dotazu. Pokud například použijete logickou vlastnost s názvem IsDeleted označující odstraněné dokumenty, můžete pomocí následujícího dotazu vyfiltrovat měkce smazané dokumenty.

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

Vytvoření materializovaného zobrazení nejnovějších verzí dokumentů

Pokud má váš kontejner Cosmos DB hodně aktualizací, může být dotaz na získání nejnovějších verzí dokumentů pomalý. Materializovaná zobrazení mají obvykle lepší výkon než dotaz, pokud existuje velké množství aktualizací. Pokud se dotaz často spouští, může být použití materializovaného zobrazení výhodné a ušetřit náklady.

Spuštěním následujícího příkazu vytvořte materializované zobrazení nejnovějších verzí dokumentů:

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

V materializovaném zobrazení nemůžete v rámci dotazu filtrovat naše měkké značky. Proto pokud chcete odstranit odstraněné dokumenty označené měkkými značkami, zadejte dotaz na materializované zobrazení a vyfiltrujte výsledky následujícím způsobem:

LatestDocuments
| where not(IsDeleted)

Volitelně můžete zapouzdřit filtrovaný dotaz do uložené funkce a volat ho, aby získal nejnovější filtrované výsledky následujícím způsobem:

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

LatestDocumentsDeletedRemoved
| summarize sum(Salary) by Area