大量刪除資料

使用代管式大量刪除服務,從資料庫中刪除資料。這項功能支援刪除一或多個集合群組。

管理大量刪除服務

如要大量刪除文件,請使用代管的大量刪除服務。Cloud Firestore 管理型大量刪除服務可透過 gcloud 指令列工具和 Cloud Firestore REST API 使用。

事前準備

如要使用受管理的大量刪除服務,請務必先完成下列事項:

  1. 如要大量刪除文件,請為 Google Cloud 專案啟用計費功能。只有已啟用帳單的 Google Cloud 專案才能使用大量刪除功能。
  2. 請確認帳戶具備 Cloud Firestore 的必要權限。如果您是專案擁有者,您的帳戶就具備必要權限。否則,下列角色會授予大量刪除作業所需的權限:

    • Cloud Firestore 角色: OwnerCloud Datastore OwnerCloud Datastore Bulk Admin

為專案設定 gcloud

您可以透過 Google Cloud 控制台或 gcloud 指令列工具,發起大量刪除作業。如要使用 gcloud,請設定指令列工具,並透過下列任一方式連線至專案:

使用代管大量刪除服務刪除資料

大量刪除作業會先找出資料庫中所有適用的文件,然後分批刪除。您仍可查詢或閱讀這些文件,但結果可能會因進度而異。大量刪除作業開始後新增或修改的文件不會遭到刪除。

大量刪除特定集合群組

gcloud

如要大量刪除特定集合群組,請使用 --collection-ids 旗標。這項作業只會刪除具有指定 ID 的集合群組。產品素材資源集合群組包含所有文件和巢狀文件 (位於任何路徑),並具有指定的產品素材資源集合群組。

gcloud firestore bulk-delete \
--collection-ids=[COLLECTION_GROUP_ID_1_OR_KIND_1],[COLLECTION_GROUP_ID_2_OR_KIND_2],[SUBCOLLECTION_GROUP_ID_1_OR_KIND_3] \
--database=[DATABASE]
舉例來說,假設頂層 cymbal 資料庫的 restaurants 集合中有多個代表餐廳的文件。每個餐廳文件下方都有多個巢狀子集合,例如 ratingsreviewsoutlets。如要大量刪除 restaurantsreviews 集合群組,請使用下列指令:

gcloud firestore bulk-delete \
--collection-ids=restaurants,reviews \
--database='cymbal'

管理大量刪除作業

啟動大量刪除作業後,Cloud Firestore 會為作業指派不重複的名稱。您可以使用作業名稱刪除、取消或檢查作業狀態。

作業名稱會加上 projects/[PROJECT_ID]/databases/[DATABASE_ID]/operations/ 前置字串,例如:

projects/my-project/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg

不過,為 describecanceldelete 指令指定作業名稱時,可以省略前置字串。

列出所有大量刪除作業

gcloud

使用 operations list 指令查看所有正在執行和最近完成的作業,包括大量刪除作業:

gcloud firestore operations list

查看作業狀態

gcloud

使用 operations describe 指令顯示大量刪除作業的狀態。

gcloud firestore operations describe [OPERATION_NAME]
預估完成時間

用於取得長時間執行作業狀態的要求,會傳回 workEstimatedworkCompleted 指標。每個指標都會以位元組數及文件數回傳:

  • workEstimated 顯示作業預計處理的位元組和文件總數。如果無法估算,Cloud Firestore可能會省略這項指標。

  • workCompleted 顯示目前已刪除的位元組數和文件數。 作業完成後,該值會顯示實際處理的位元組總數和文件數,可能大於 workEstimated 的值。

workCompleted 除以 workEstimated 可得出進度的粗估值。這項預估值可能不準確,因為是根據延遲的統計資料收集作業而得。

取消作業

gcloud

使用 operations cancel 指令停止進行中的作業:

gcloud firestore operations cancel [OPERATION_NAME]

取消正在執行的作業不會復原作業,取消大量刪除作業後,已刪除的文件不會復原。

刪除作業

使用 gcloud firestore operations delete 指令,從近期作業清單中移除已完成的作業。如要取消正在執行的作業,請使用先前的取消作業。

gcloud firestore operations delete [OPERATION_NAME]

受管理的大量刪除作業的計費和定價

使用代管大量刪除服務前,您需要先為 Google Cloud 專案啟用計費功能。

大量刪除作業會按照Cloud Firestore定價頁面列出的費率,針對文件讀取和刪除作業收費。大量刪除作業會針對找到的每個文件產生一次索引項目讀取作業,並針對刪除的每個文件產生一次刪除作業。讀取最多 1,000 個索引項目時,系統會收取一次讀取作業費用。舉例來說,如果大量刪除作業刪除了 1500 份文件,您需要支付 2 次文件讀取和 1500 次文件刪除的費用。

請注意,Cloud Firestore會根據實際完成的工作收費。如果作業因使用者錯誤而取消或失敗,系統會根據作業進度向您收費。Cloud Firestore 不會針對最終未刪除的文件收費,例如在刪除作業開始後修改的文件。費用會在作業完成當天計入。

大量刪除作業完成後,才會觸發Google Cloud預算快訊。同樣地,大量刪除作業期間執行的讀取和刪除作業,會在作業完成後計入免費方案的使用量。大量刪除作業不會影響控制台用量部分顯示的用量。

查看大量刪除費用

大量刪除作業會將 goog-firestoremanaged:bulkdelete 標籤套用至已計費的作業。在 Cloud Billing 報表頁面中,您可以使用這個標籤查看與大量刪除作業相關的費用。

最佳做法

避免略過已刪除的資料,否則可能會導致查詢速度變慢。