共用方式為


取得最新版本的 Azure Cosmos DB 文件

在本文中,您將瞭解如何取得最新版本的內嵌檔。

取得最新版本的檔

每次從變更摘要擷取檔更新時,就會在目標數據表中加入新的數據列。 一段時間后,數據表會建置對應 Cosmos DB 容器中每個文件的歷程記錄。 典型的需求是查詢最新版本的文件,對應至取得 Cosmos DB 容器的目前狀態

您可以使用下列方式從資料表查詢 目前狀態

在範例中,您將藉由摘要標識符數據行的數據表,使用 _timestamp 數據行上的 arg_max 函式,只顯示具有最新時間戳的數據列,以取得檔的最新版本。

注意

_timestamp數據行是從內嵌 Cosmos DB 檔的 _ts 屬性建立。 從 (_ts) 到 (_timestamp) 的轉換是由針對數據表設定的擷取數據表對應來執行。DateTimeFromUnixSecondsdatetime _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