「Firestore 大量刪除範本」這個管道可使用指定的 GQL 查詢從 Firestore 讀取實體資料,然後再刪除選定目標專案中所有相符的實體。這個管道可讓您選擇是否要傳送 JSON 編碼的 Firestore 實體傳送到 JavaScript UDF,而您可以藉由傳回 null 值來篩選實體。
管道相關規定
- 執行範本前,必須先在專案中設定 Firestore。
- 假如讀取和刪除所在的 Firestore 執行個體不同,Dataflow Worker 服務帳戶必須有權限可以從其中一個執行個體讀取,再從另一個刪除。
- Firestore 執行個體必須啟用資料庫寫入功能。
範本參數
參數 | 說明 |
---|---|
firestoreReadGqlQuery |
指定符合刪除條件的實體的 GQL 查詢,使用僅限鍵查詢可提升效能。例如:「SELECT __key__ FROM MyKind」。 |
firestoreReadProjectId |
您要使用 GQL 查詢讀取的實體 (用於比對條件) 的 Firestore 執行個體專案 ID。 |
firestoreDeleteProjectId |
要刪除相符實體的 Firestore 執行個體專案 ID,如要在同一個 Firestore 執行個體中讀取和刪除,則可以與 firestoreReadProjectId 相同。 |
firestoreReadNamespace |
(選用) 要求實體的命名空間,預設命名空間為 ""。 |
firestoreHintNumWorkers |
(選用) Firestore 升速節流步驟中預期工作站數量的提示。預設值為 500 。 |
javascriptTextTransformGcsPath |
(選用)
定義要使用 JavaScript 使用者定義函式 (UDF) 的 .js 檔案 Cloud Storage URI。例如:gs://my-bucket/my-udfs/my_file.js 。
|
javascriptTextTransformFunctionName |
(選用)
您要使用的 JavaScript 使用者定義函式 (UDF) 名稱。舉例來說,如果您的 JavaScript 函式程式碼是 myTransform(inJson) { /*...do stuff...*/ } ,則函式名稱就是 myTransform 。如需 JavaScript UDF 範例,請參閱「UDF 範例」。
如果函式對於指定 Firestore 實體傳回未定義的值或 null,則該實體就不會刪除。 |
使用者定義函式
您可以視需要撰寫使用者定義函式 (UDF) 來擴充這個範本。範本會針對每個輸入元素呼叫 UDF。元素酬載會序列化為 JSON 字串。詳情請參閱「為 Dataflow 範本建立使用者定義函式」。
函式規格
UDF 的規格如下:
- 輸入:以 JSON 字串序列化的 Firestore 實體。
- 輸出:如要保留實體而不刪除,請傳回
null
或undefined
。否則,請傳回要刪除的原始實體。
執行範本
控制台
- 前往 Dataflow 的「Create job from template」(透過範本建立工作) 頁面。 前往「依據範本建立工作」
- 在「工作名稱」欄位中,輸入專屬工作名稱。
- 選用:如要使用區域端點,請從下拉式選單中選取值。預設區域為
us-central1
。如需可執行 Dataflow 工作的地區清單,請參閱「Dataflow 位置」。
- 從「Dataflow template」(Dataflow 範本) 下拉式選單中選取 the Bulk Delete Entities in Firestore template。
- 在提供的參數欄位中輸入參數值。
- 按一下「Run Job」(執行工作)。
gcloud
在殼層或終端機中執行範本:
gcloud dataflow jobs run JOB_NAME \ --gcs-location gs://dataflow-templates-REGION_NAME/VERSION/Firestore_to_Firestore_Delete \ --region REGION_NAME \ --parameters \ firestoreReadGqlQuery="GQL_QUERY",\ firestoreReadProjectId=FIRESTORE_READ_AND_DELETE_PROJECT_ID,\ firestoreDeleteProjectId=FIRESTORE_READ_AND_DELETE_PROJECT_ID
更改下列內容:
JOB_NAME
: 您選擇的不重複工作名稱REGION_NAME
: 您要部署 Dataflow 工作的地區,例如us-central1
VERSION
: 您要使用的範本版本您可以使用下列值:
latest
,使用範本的最新版本,該版本位於值區中非依日期命名的上層資料夾:gs://dataflow-templates-REGION_NAME/latest/- 版本名稱 (例如
2023-09-12-00_RC00
),用於指定範本版本,該版本會以巢狀結構存放在值區中依日期命名的上層資料夾中:gs://dataflow-templates-REGION_NAME/
GQL_QUERY
:您要用來比對符合刪除條件的實體FIRESTORE_READ_AND_DELETE_PROJECT_ID
:您的 Firestore 執行個體專案 ID。這個例子讀取和刪除都是在同一個 Firestore 執行個體。
API
如要使用 REST API 執行範本,請傳送 HTTP POST 要求。如要進一步瞭解 API 和授權範圍,請參閱 projects.templates.launch
。
POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/templates:launch?gcsPath=gs://dataflow-templates-LOCATION/VERSION/Firestore_to_Firestore_Delete { "jobName": "JOB_NAME", "parameters": { "firestoreReadGqlQuery": "GQL_QUERY", "firestoreReadProjectId": "FIRESTORE_READ_AND_DELETE_PROJECT_ID", "firestoreDeleteProjectId": "FIRESTORE_READ_AND_DELETE_PROJECT_ID" }, "environment": { "zone": "us-central1-f" } }
更改下列內容:
PROJECT_ID
: 您要執行 Dataflow 工作的專案 ID Google CloudJOB_NAME
: 您選擇的不重複工作名稱LOCATION
: 您要部署 Dataflow 工作的地區,例如us-central1
VERSION
: 您要使用的範本版本您可以使用下列值:
latest
,使用範本的最新版本,該版本位於值區中非依日期命名的上層資料夾:gs://dataflow-templates-REGION_NAME/latest/- 版本名稱 (例如
2023-09-12-00_RC00
),用於指定範本版本,該版本會以巢狀結構存放在值區中依日期命名的上層資料夾中:gs://dataflow-templates-REGION_NAME/
GQL_QUERY
:您要用來比對符合刪除條件的實體FIRESTORE_READ_AND_DELETE_PROJECT_ID
:您的 Firestore 執行個體專案 ID。這個例子讀取和刪除都是在同一個 Firestore 執行個體。
後續步驟
- 瞭解 Dataflow 範本。
- 請參閱 Google 提供的範本清單。