大量刪除資料
您可以使用 Firestore 代管的大量刪除服務,從資料庫中刪除資料。這項功能支援刪除一或多個集合群組。
本頁說明如何使用代管大量刪除服務,大量刪除 Firestore 文件。透過 gcloud
指令列工具和 Firestore API (REST、RPC),即可使用 Firestore 代管大量刪除服務。
事前準備
您必須先完成下列步驟,才能使用代管大量刪除服務:
- 為 Google Cloud 專案啟用計費功能。只有啟用計費功能的專案才能使用大量刪除功能。 Google Cloud
-
請確認帳戶具備 Firestore 的必要權限。如果您是專案擁有者,您的帳戶必須擁有必要權限。若非如此,下列角色可授予大量刪除作業的必要權限:
- Firestore 角色:
Owner
、Cloud Datastore Owner
或Cloud Datastore Bulk Admin
- Firestore 角色:
為專案設定 gcloud
您可以透過 Google Cloud 主控台或 gcloud
指令列工具啟動大量刪除作業。如要使用 gcloud
,請設定指令列工具,並透過下列其中一種方式連線至專案:
使用 Cloud Shell 從控制台存取
gcloud
Google Cloud 。確保將
gcloud
設定為正確的專案:gcloud config set project [PROJECT_ID]
大量刪除資料
大量刪除作業會先找出資料庫中所有適用的文件,然後分批刪除。您仍可查詢或讀取這些文件,但結果可能會因進度而異。大量刪除作業開始後新增或修改的文件不會遭到刪除。
大量刪除特定收藏群組
gcloud
如要大量刪除特定收藏群組,請使用 --collection-ids
標記。這項作業只會刪除具有指定 ID 的集合群組。集合群組包含所有文件和巢狀文件 (位於任何路徑),以及指定的集合群組。
gcloud beta 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
集合中有多個代表餐廳的文件。每個餐廳文件下方都有多個巢狀子集合,例如 ratings
、reviews
和 outlets
。如要大量刪除 restaurants
和 reviews
集合群組,指令如下:
gcloud beta firestore bulk-delete \ --collection-ids=restaurants,reviews \ --database='cymbal'
管理大量刪除作業
啟動大量刪除作業後,Firestore 會為該作業指派專屬名稱。您可以使用作業名稱刪除、取消或檢查作業狀態。
作業名稱的前置字串為 projects/[PROJECT_ID]/databases/[DATABASE_ID]/operations/
,例如:
projects/my-project/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
不過,為 describe
、cancel
和 delete
指令指定作業名稱時,可以省略前置字串。
列出所有大量刪除作業
gcloud
使用 operations list
指令查看所有執行中和最近完成的作業,包括大量刪除作業:
gcloud firestore operations list
檢查作業狀態
gcloud
使用 operations describe
指令顯示大量刪除作業的狀態。
gcloud firestore operations describe [OPERATION_NAME]
估算完成時間
用於取得長時間執行作業狀態的要求,會傳回 workEstimated
和 workCompleted
指標。每個指標都會以位元組數及文件數回傳:
workEstimated
會顯示作業將要處理的位元組總數和文件總數預估值。如果 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 專案啟用計費功能。
系統會依據 Firestore 定價中的文件讀取和刪除作業費率表,向您收取大量刪除作業的費用。大量刪除作業會針對找到的每個文件產生一次索引項目讀取作業,並針對刪除的每個文件產生一次刪除作業。系統會針對讀取的每 1,000 個索引項目收取一次讀取作業費用。舉例來說,如果大量刪除作業刪除了 1500 份文件,您需要支付 2 次文件讀取和 1500 次文件刪除的費用。
請注意,Firestore 會根據實際完成的工作收費。如果作業因使用者錯誤而取消或失敗,您仍須支付已完成部分的費用。如果文件最終未刪除 (例如在刪除作業開始後修改的文件),Firestore 不會收取讀取或刪除費用。費用會在作業完成當天計入。
大量刪除作業完成後,系統才會發出Google Cloud 預算快訊。同樣地,在大量刪除作業期間執行的讀取和刪除,將在作業完成後套用至您的免費配額/用量。大量刪除作業不會影響管理控制台使用情況部分顯示的使用量。
查看大量刪除費用
大量刪除作業會將goog-firestoremanaged:bulkdelete
標籤套用至已計費的作業。在 Cloud Billing 報表頁面中,您可以使用這個標籤查看與大量刪除作業相關的費用。
最佳做法
避免略過已刪除的資料,否則可能會導致查詢速度變慢。