다음을 통해 공유


최신 버전의 Azure Cosmos DB 문서 가져오기

이 문서에서는 수집된 문서의 최신 버전을 가져오는 방법을 알아봅니다.

최신 버전의 문서 가져오기

문서 업데이트가 변경 피드에서 수집될 때마다 새 행이 대상 테이블에 추가됩니다. 시간이 지남에 따라 테이블은 해당 Cosmos DB 컨테이너에 있는 모든 문서의 기록을 빌드합니다. 일반적인 요구 사항은 Cosmos DB 컨테이너의 현재 상태를 가져오는 것과 일치하는 문서의 최신 버전을 쿼리하는 것입니다.

다음 방법을 사용하여 테이블에서 현재 상태를 쿼리할 수 있습니다.

이 예제에서는 _timestamp 열의 arg_max 함수 를 사용하여 ID 열별로 테이블을 요약하여 최신 버전의 문서를 가져오며 가장 최근의 타임스탬프가 있는 행만 표시합니다.

참고 항목

_timestamp 열은 Cosmos DB 문서를 수집한 _ts 속성에서 만들어집니다. (_ts)에서 DateTimeFromUnixSeconds (_timestamp)datetime로의 변환은 테이블에 대해 구성된 수집 테이블 매핑에 의해 수행됩니다. _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