共用方式為


依分割區索引鍵值刪除項目 - API for NoSQL (預覽)

適用於:NoSQL

本文說明如何使用 Azure Cosmos DB SDK,依邏輯分割區索引鍵值刪除所有項目。

重要

[依資料分割索引鍵值刪除項目] 功能處於公開預覽狀態。 此功能不提供服務等級協定。 如需詳細資訊,請參閱 Microsoft Azure 預覽版增補使用條款

功能概觀

依分割區索引鍵功能刪除是異步的背景作業,可讓您使用 Cosmos SDK 來刪除具有相同邏輯分割區索引鍵值的所有檔。

由於要刪除的檔數目可能很大,因此作業會在背景中執行。 雖然實體刪除作業會在背景執行,但效果會立即提供,因為要刪除的檔不會出現在查詢或讀取作業的結果中。

依資料分割索引鍵作業刪除的目標是盡最大努力在容器上使用每秒可用要求單位 (RU/s) 總數的 10%。 這有助於限制此背景工作所使用的資源。

開始

請使用 Azure CLI 更新您的 Azure Cosmos DB 帳戶,以啟用 依分割區鍵刪除 功能。

  1. 設定殼層變數。

        $resourceGroupName = <azure_resource_group>
        $accountName = <azure_cosmos_db_account_name>
        $DeleteByPk = "DeleteAllItemsByPartitionKey"
    
  2. 列出您帳戶的現有功能。

       $cosmosdb = az cosmosdb show \
        --resource-group $resourceGroupName \
        --name $accountName
       $capabilities = ($cosmosdb | ConvertFrom-Json).capabilities 
    
  3. 如果功能不存在,請在功能清單中新增 [依資料分割索引鍵刪除項目] 功能。

    附註

    功能清單必須一律指定您想要啟用的所有功能。 這包括已針對您想要保留的帳戶所啟用的功能。

       $capabilities = $DeleteByPk
    
  4. 更新 Cosmos DB 帳戶,以啟用依分割區鍵刪除專案功能。

        az cosmosdb update --capabilities $capabilities \
         -n $accountName -g $resourceGroupName
    

範例指令碼

若要依資料分割索引鍵刪除項目,請使用 Azure Cosmos DB .NET SDK 3.25.0 預覽版或更新版本。

// Suppose our container is partitioned by tenantId, and we want to delete all the data for a particular tenant Contoso

// Get reference to the container
var container = cosmosClient.GetContainer("DatabaseName", "ContainerName");

// Delete by logical partition key
ResponseMessage deleteResponse = await container.DeleteAllItemsByPartitionKeyStreamAsync(new PartitionKey("Contoso"));

 if (deleteResponse.IsSuccessStatusCode) {
    Console.WriteLine($"Delete all documents with partition key operation has successfully started");
}

常見問題集 (FAQ)

刪除分區鍵操作的結果是否會立即反映?

一旦按分區索引鍵的刪除操作開始,要刪除的文件就不會出現在查詢或讀取操作的結果中。 這也表示,您可以使用與要刪除的文件相同的識別碼和分割區索引鍵寫入新文件,而不會造成衝突。

如有例外狀況,請參閱已知問題

如果我執行根據分區鍵的刪除操作,然後立即使用相同的分區鍵寫入新文件,會發生什麼事?

依分割區索引鍵刪除操作發出時,只會刪除容器中具有該分割區索引鍵值的文件。 任何傳入的新檔都不屬於刪除範圍。

在針對容器的其他作業中,依分割區索引鍵刪除作業的優先順序如何?

根據預設,依據分割區索引鍵值進行的刪除作業最多可以消耗資源總 RU/s 的 0.1 或 10% 的預留部份。 此容器中未使用的任何請求單位 (RU) 將可用於其他非背景作業,例如讀取、寫入和查詢。

例如,假設您已在容器上佈建 1000 RU/秒。 「依分割區索引鍵刪除」作業會持續進行,而且每秒使用 100 個 RU,並持續 5 秒。 在這 5 秒的每一秒中,都有 900 個 RU 可用於非背景資料庫作業。 刪除作業完成後,所有 1000 RU/s 現在都再次可供使用。

已知問題

在某些案例中,依資料分割索引鍵作業的刪除可能不會立即保證其效果,而且部分可見度可能會在作業期間發生。

  • 使用索引的聚合查詢,例如 COUNT 查詢,在使用分區鍵進行的刪除作業期間發出的查詢可能包含要刪除的文檔結果。 在刪除作業完全完成之前,可能會發生這種情況。
  • 在以分區索引鍵進行刪除作業期間,針對 分析存放區 發出的查詢可能包含將被刪除的文件結果。 在刪除作業完全完成之前,可能會發生這種情況。
  • 在依資料分割索引鍵作業持續刪除期間,觸發連續備份 (時間點還原),可能包含還原集合中要刪除的文件結果。 如果您有需要連續備份的情節,則不建議使用此預覽功能。

限制

不支援階層式分割區索引鍵刪除。 此功能只允許根據最後一個分割區索引鍵層級來刪除項目。 例如,假設分區鍵包含三個階層層級:國家/地區、州和城市。 在此內容中,您可以藉由指定完整的分割區索引鍵,包括所有層級,即國家/地區、州和城市,來有效運用依分割區索引鍵刪除的功能。 嘗試使用中繼資料分割索引鍵來刪除,例如國家/地區或州,或僅使用國家/地區,會導致錯誤。

如何提供意見反應或回報問題/錯誤

向 cosmosPkDeleteFeedbk@microsoft.com 傳送問題或意見反應。

SDK 需求

尋找支援此功能的最新版本 SDK。

SDK 支援的版本 套件管理員連結
.NET SDK v3 3.25.0 或更高版本(必須是預覽版本) https://www.nuget.org/packages/Microsoft.Azure.Cosmos/
Java SDK v4 4.19.0 或更高版本 (API 標示為 beta) https://mvnrepository.com/artifact/com.azure/azure-cosmos
Python SDK v4 4.4.0b1 或更高版本 (必須是 Beta 版) https://pypi.org/project/azure-cosmos/4.4.0b1/

規劃未來將支援其他 SDK。

下一步