Firestore Bulk Delete 模板

Firestore Bulk Delete 模板是一种流水线,它使用给定的 GQL 查询从 Firestore 中读取实体,然后删除所选目标项目中的所有匹配实体。此流水线可选择性地将 JSON 编码的 Firestore 实体传递给您的 JavaScript UDF,使您可以通过返回 null 值来过滤掉实体。

流水线要求

  • 必须先在项目中设置 Firestore,然后才能运行模板。
  • 如果从单独的 Firestore 实例中读取和删除,则 Dataflow 工作器服务账号必须具有从一个实例读取并从另一个实例中删除的权限。
  • 必须在 Firestore 实例上启用数据库写入

模板参数

参数 说明
firestoreReadGqlQuery GQL 查询,指定要删除的匹配实体。使用仅限于键的查询可以提高性能。例如:“SELECT __key__ FROM MyKind”。
firestoreReadProjectId 您要从中读取用于匹配的实体(使用 GQL 查询)的 Firestore 实例的项目 ID。
firestoreDeleteProjectId 要从中删除匹配的实体的 Firestore 实例的项目 ID。如果您希望在同一个 Firestore 实例中执行读取和删除操作,则此 ID 可以与 firestoreReadProjectId 相同。
firestoreReadNamespace (可选)所请求实体的命名空间。默认名称空间设置为“”。
firestoreHintNumWorkers (可选)Firestore 逐步增加限制步骤中的预期工作器数量的提示。默认值为 500
javascriptTextTransformGcsPath (可选) .js 文件的 Cloud Storage URI,用于定义您要使用的 JavaScript 用户定义的函数 (UDF)。例如 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 具有以下规范:

  • 输入:Firestore 实体,序列化为 JSON 字符串。
  • 输出:如果您想保留实体而不删除它,请返回 nullundefined。否则,返回要删除的原始实体。

运行模板

控制台

  1. 转到 Dataflow 基于模板创建作业页面。
  2. 转到“基于模板创建作业”
  3. 作业名称字段中,输入唯一的作业名称。
  4. 可选:对于区域性端点,从下拉菜单中选择一个值。默认区域为 us-central1

    如需查看可以在其中运行 Dataflow 作业的区域列表,请参阅 Dataflow 位置

  5. Dataflow 模板下拉菜单中,选择 the Bulk Delete Entities in Firestore template。
  6. 在提供的参数字段中,输入您的参数值。
  7. 点击运行作业

gcloud

在 shell 或终端中,运行模板:

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:您要使用的模板的版本

    您可使用以下值:

  • 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 作业的 Google Cloud 项目的 ID
  • JOB_NAME:您选择的唯一性作业名称
  • LOCATION:要在其中部署 Dataflow 作业的区域,例如 us-central1
  • VERSION:您要使用的模板的版本

    您可使用以下值:

  • GQL_QUERY:用于匹配要删除的实体的查询
  • FIRESTORE_READ_AND_DELETE_PROJECT_ID:您的 Firestore 实例项目 ID。此示例从同一个 Firestore 实例中读取和删除。

后续步骤