Поделиться через


Получение последних версий документов 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