通过治理工作流请求批量元数据更改

本文档介绍了如何使用 REST API 为 Knowledge Catalog(以前称为 Dataplex Universal Catalog)中的条目组提交批量元数据更改请求。

如果您没有对条目组的直接写入权限,则可以将最多 250 个针对条目和条目链接的创建、更新和删除操作分组到单个更改请求中,以供审核和批准。

准备工作

如需提交批量元数据更改请求,请确保您已启用所需的 API,并且对目标条目组拥有必要的 Identity and Access Management (IAM) 角色和权限。

启用 Dataplex API(如果尚未启用)。

启用 API 所需的角色

如需启用 API,您需要拥有 serviceusage.services.enable 权限。如果您创建了项目,则可能已经通过 Owner 角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。了解如何授予角色。

启用 API

所需的角色

如需获得为条目群组请求批量元数据更改所需的权限,请让管理员向您授予目标条目群组的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

如需详细了解角色和权限,请参阅 Knowledge Catalog IAM 角色。

创建批量元数据更改请求

当您提交批量更改请求时,Knowledge Catalog 会检查请求语法,并验证任何引用的条目类型、切面类型、条目链接类型和父条目是否存在。请求获得批准后,Knowledge Catalog 会检查目标条目和条目链接是否存在,例如,在创建现有资源时返回 ALREADY_EXISTS 错误,或在更新或删除缺失资源时返回 NOT_FOUND 错误。

当审批人批准批量更改请求时,Knowledge Catalog 会自动按以下依赖顺序应用操作:

  1. 删除条目链接。
  2. 删除条目。
  3. 创建和更新条目。
  4. 创建和更新条目链接。

批量更改请求不提供事务一致性或自动回滚。获得批准后,Knowledge Catalog 会单独评估并应用每项操作。

构建批处理时,请注意以下引用规则:

  • 请勿引用在同一批次中删除的条目:您无法创建或更新引用在同一批次中删除的条目的条目链接,也无法将 parentEntry 设置为在同一批次中删除的条目。
  • 在子条目之前列出父条目:如果新条目引用同一批次中的另一个条目作为其 parentEntry,请在创建子条目的请求之前列出创建父条目的请求。创建条目或条目链接时,parent 条目组字段是可选的。如果您省略 parent,Knowledge Catalog 会使用 changePayload.name 中的条目组。如果您添加了 parent,则它必须与 changePayload.name 匹配。

如需提交基本批量元数据更改请求,请使用 entryGroups.requestBatchMetadataChange 方法:

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "projects/PROJECT_ID/locations/LOCATION/entryGroups/ENTRY_GROUP_ID",
    "changePayload": {
      "name": "projects/PROJECT_ID/locations/LOCATION/entryGroups/ENTRY_GROUP_ID",
      "changes": [
        {
          "createEntryRequest": {
            "parent": "projects/PROJECT_ID/locations/LOCATION/entryGroups/ENTRY_GROUP_ID",
            "entryId": "ENTRY_ID",
            "entry": {
              "entryType": "projects/PROJECT_ID/locations/LOCATION/entryTypes/ENTRY_TYPE_ID"
            }
          }
        }
      ]
    },
    "justification": "JUSTIFICATION"
  }' \
  "https://dataplex.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/entryGroups/ENTRY_GROUP_ID:requestBatchMetadataChange"

替换以下内容:

  • PROJECT_ID:包含条目组的 Google Cloud项目的 ID。
  • LOCATION:条目组的位置,例如 us-central1。
  • ENTRY_GROUP_ID:目标条目群组的 ID。
  • ENTRY_ID:要创建的新条目的 ID。
  • ENTRY_TYPE_ID:新条目的条目类型 ID。
  • JUSTIFICATION:需要元数据更改请求的原因,最多 1,024 个字符。

该服务会返回一个响应,其中包含所创建的变更请求的资源名称:

{
  "changeRequest": "projects/123456789012/locations/us-central1/changeRequests/eeb06bad-fc7f-49b9-9fb2-61d1ad4bad32"
}

验证创建的批量更改请求

如需检查创建的变更请求,请使用 changeRequests.get 方法:

curl -X GET \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "https://dataplex.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/changeRequests/CHANGE_REQUEST_ID"

替换以下内容:

  • PROJECT_ID:您的Google Cloud 项目的 ID。
  • LOCATION:资源所在的区域,例如 us-central1。
  • CHANGE_REQUEST_ID:请求的唯一 ID。

该服务会返回一个包含批量载荷的 ChangeRequest 资源:

用户提交的批量更改请求的示例响应

{
  "name": "projects/123456789012/locations/us-central1/changeRequests/eeb06bad-fc7f-49b9-9fb2-61d1ad4bad32",
  "uid": "eeb06bad-fc7f-49b9-9fb2-61d1ad4bad32",
  "createTime": "2026-09-14T09:06:40.352156739Z",
  "updateTime": "2026-09-14T09:06:41.714939166Z",
  "justification": "Requesting creation of a new entry",
  "author": "requester@example.com",
  "state": "NEW",
  "resource": "//dataplex.googleapis.com/projects/my-project/locations/us-central1/entryGroups/my-entry-group",
  "etag": "0YSwO12PxwypRJj6kqM3CTZ9BYk4wk3yasxdiMDE3MU",
  "changeType": "BATCH_CHANGE_METADATA",
  "batchChangeMetadataRequest": {
    "name": "projects/my-project/locations/us-central1/entryGroups/my-entry-group",
    "changes": [
      {
        "createEntryRequest": {
          "parent": "projects/my-project/locations/us-central1/entryGroups/my-entry-group",
          "entryId": "new-entry-id",
          "entry": {
            "entryType": "projects/my-project/locations/us-central1/entryTypes/my-entry-type"
          }
        }
      }
    ]
  }
}

如果富化代理运行自动创建了批量更改请求,则 author 字段包含富化代理服务账号,batchChangeMetadataRequest.description.job.name 字段包含富化运行资源名称。

创建多资源批量更改请求

如需在单个条目组中提议对多个资源进行更改,请使用 entryGroups.requestBatchMetadataChange 方法。例如,您可以使用此方法创建第一个条目,创建附加了切面的第二个条目,然后创建连接这两个条目的定向条目链接。

如需创建多资源批量更改请求,请发送以下 POST 请求:

用于创建多资源批量变更请求的示例请求

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "projects/PROJECT_ID/locations/LOCATION/entryGroups/ENTRY_GROUP_ID",
    "changePayload": {
      "name": "projects/PROJECT_ID/locations/LOCATION/entryGroups/ENTRY_GROUP_ID",
      "changes": [
        {
          "createEntryRequest": {
            "parent": "projects/PROJECT_ID/locations/LOCATION/entryGroups/ENTRY_GROUP_ID",
            "entryId": "FIRST_ENTRY_ID",
            "entry": {
              "entryType": "projects/PROJECT_ID/locations/LOCATION/entryTypes/ENTRY_TYPE_ID"
            }
          }
        },
        {
          "createEntryRequest": {
            "parent": "projects/PROJECT_ID/locations/LOCATION/entryGroups/ENTRY_GROUP_ID",
            "entryId": "SECOND_ENTRY_ID",
            "entry": {
              "entryType": "projects/PROJECT_ID/locations/LOCATION/entryTypes/ENTRY_TYPE_ID",
              "aspects": {
                "PROJECT_ID.LOCATION.ASPECT_TYPE_ID": {
                  "data": {
                    "ASPECT_FIELD_NAME": "ASPECT_FIELD_VALUE"
                  }
                }
              }
            }
          }
        },
        {
          "createEntryLinkRequest": {
            "parent": "projects/PROJECT_ID/locations/LOCATION/entryGroups/ENTRY_GROUP_ID",
            "entryLinkId": "ENTRY_LINK_ID",
            "entryLink": {
              "entryLinkType": "projects/PROJECT_ID/locations/LOCATION/entryLinkTypes/ENTRY_LINK_TYPE_ID",
              "entryReferences": [
                {
                  "name": "projects/PROJECT_ID/locations/LOCATION/entryGroups/ENTRY_GROUP_ID/entries/FIRST_ENTRY_ID",
                  "type": "SOURCE"
                },
                {
                  "name": "projects/PROJECT_ID/locations/LOCATION/entryGroups/ENTRY_GROUP_ID/entries/SECOND_ENTRY_ID",
                  "type": "TARGET"
                }
              ]
            }
          }
        }
      ]
    },
    "justification": "JUSTIFICATION"
  }' \
  "https://dataplex.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/entryGroups/ENTRY_GROUP_ID:requestBatchMetadataChange"

替换以下内容:

  • PROJECT_ID:包含条目组的Google Cloud 项目的 ID。
  • LOCATION:条目组的位置,例如 us-central1。
  • ENTRY_GROUP_ID:目标条目群组的 ID。
  • FIRST_ENTRY_ID:第一个自定义条目的 ID,用作条目链接中的 SOURCE。
  • SECOND_ENTRY_ID:附加了切面的第二个自定义条目的 ID,用作条目链接中的 TARGET。
  • ENTRY_TYPE_ID:新条目的条目类型 ID。
  • ASPECT_TYPE_ID:附加到第二个条目的切面类型的 ID。
  • ASPECT_FIELD_NAME:切面模板中字段的名称。
  • ASPECT_FIELD_VALUE:切面字段的值。
  • ENTRY_LINK_ID:连接两个条目的条目链接的 ID。
  • ENTRY_LINK_TYPE_ID:条目链接类型的 ID,例如 my-entry-link-type。
  • JUSTIFICATION:说明为何需要这些元数据更改。

该服务会返回一个响应,其中包含所创建的变更请求的资源名称:

{
  "changeRequest": "projects/123456789012/locations/us-central1/changeRequests/eeb06bad-fc7f-49b9-9fb2-61d1ad4bad32"
}

后续步骤