Получение последних версий документов Azure Cosmos DB

Из этой статьи вы узнаете, как получить последнюю версию приема документов.

Получение последних версий документов

При каждом приеме обновления документа из канала изменений в целевую таблицу добавляется новая строка. Со временем таблица создает журнал каждого документа в соответствующем контейнере Cosmos DB. Типичным требованием является запрос последней версии документа, соответствующий текущему состоянию контейнера Cosmos DB.

Для запроса текущего состояния из таблицы можно использовать следующие способы:

В примерах вы получите последние версии документа, обобщая таблицу по столбцу Id , используя функцию arg_max в столбце _timestamp , чтобы отобразить только строки с самыми последними метками времени.

Примечание

Столбец _timestamp создается из свойства _ts приема документов Cosmos DB. Преобразование из DateTimeFromUnixSeconds (_ts) в datetime (_timestamp) выполняется сопоставлением таблицы приема, настроенным для таблицы. Преобразованные данные в столбце _timestamp делают запросы и материализованные представления более производительными, чем использование собственного DateTimeFromUnixSecondsзначения _ts .

Выполнение запроса для получения последних версий документов

Выполните следующий запрос, чтобы получить последние версии документов:

TestTable
| summarize arg_max(_timestamp, *) by Id

Если вы использовали мягкие маркеры для пометки удаленных документов, их можно отфильтровать с помощью следующего запроса:

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

Создание материализованного представления последних версий документов

Если в контейнере Cosmos DB много обновлений, запрос на получение последних версий документов может выполняться медленно. Материализованные представления обычно имеют более высокую производительность, чем запросы при наличии большого количества обновлений. Если запрос выполняется часто, использование материализованного представления может оказаться полезным и сократить затраты.

Выполните следующую команду, чтобы создать материализованное представление последних версий документов:

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

В материализованном представлении вы не можете фильтровать наши мягкие маркеры в рамках запроса. Поэтому, чтобы удалить удаленные документы, на которые указывают мягкие маркеры, выполните запрос к материализованному представлению и отфильтруйте результаты следующим образом:

LatestDocuments
| where not(IsDeleted)

При необходимости инкапсулировать отфильтрованный запрос в хранимую функцию и вызвать его, чтобы получить последние отфильтрованные результаты, как показано ниже.

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

LatestDocumentsDeletedRemoved
| summarize sum(Salary) by Area