将数据产品发布到 SAP BDC

Google Cloud 让您无需复制即可与 SAP Business Data Cloud (BDC) 共享 BigQuery 数据。如需将数据发布到 SAP BDC,您需要在 Lakehouse 运行时目录中配置 Apache Iceberg REST 目录端点,或设置Knowledge Catalog 数据产品。

如需简要了解此集成及其用例,请参阅 SAP BDC 集成简介。

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud新手,请 创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. Verify that billing is enabled for your Google Cloud project.

  3. Enable the BigLake and Dataplex APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  4. Verify that billing is enabled for your Google Cloud project.

  5. Enable the BigLake and Dataplex APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  6. Cloud Storage 存储桶:创建一个 Cloud Storage 存储桶,用于存储 Iceberg 元数据和数据文件。如需查看相关说明,请参阅创建存储桶。所有资源(包括后端存储桶)都必须位于同一区域,以避免配置流水线失败。
  7. Apache Iceberg REST 目录端点:在 Lakehouse 运行时目录中设置 Apache Iceberg REST 目录端点,并启用凭证发放功能,其中包含您要共享的命名空间和表。此目录使用 Cloud Storage 存储桶作为其数据仓库。如需查看相关说明,请参阅设置 Apache Iceberg REST Catalog 端点。
  8. Delta Sharing 连接目录:为 SAP BDC 连接准备一个已注册的 Delta Sharing 连接目录。此目录与您在初始设置期间创建的目录相同,用于将数据从 SAP BDC 共享到 BigQuery;您无需创建新目录。如需查看相关说明,请参阅为 SAP Business Data Cloud 设置跨云连接。
  9. 工作负载身份联合 (WIF):准备配置 WIF 以信任 SAP BDC 身份验证颁发者。您将在下一部分中进行此项设置。

所需的角色

如需获得配置工作负载身份联合和发布数据所需的权限,请让您的管理员为您授予项目的以下 IAM 角色:

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

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

常规工作流程

如需将数据发布到 SAP BDC,请按以下步骤操作:

  1. 配置 Workload Identity 联合:创建 Workload Identity 联合池和提供方,以便与 SAP BDC OIDC 颁发者建立信任关系。
  2. 向联合主账号授予角色:向联合身份授予查看目录元数据和使用服务配额的权限。
  3. 发布数据:使用 gcloud CLI 将 Apache Iceberg REST 目录端点或 Knowledge Catalog 数据产品发布到 SAP BDC。

配置工作负载身份联合

如需让 SAP BDC 访问无边界湖仓一体资源,而无需导出的服务账号密钥,请配置工作负载身份联合 (WIF)。这会在 Google Cloud 与 SAP BDC OIDC 颁发者之间建立信任关系。

请按照以下步骤设置 WIF 池和提供方:

获取颁发者 URI

从 Delta Sharing 连接目录中检索 OIDC 颁发者 URI。您需要使用此 URI 来配置 WIF 提供方。

gcloud biglake delta-sharing catalogs describe CONNECTION_CATALOG_ID \
    --project="PROJECT_ID"

在命令输出中,找到包含颁发者 URI 的 federatedIdentityIssuer 字段。

创建工作负载身份池

创建工作负载身份池,以便对外部身份进行分组。

gcloud iam workload-identity-pools create POOL_ID \
    --location="global" \
    --display-name="POOL_DISPLAY_NAME" \
    --project="PROJECT_ID"

创建 OIDC 提供方

在池中创建 OIDC 提供方,以定义信任关系并映射令牌声明。

gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID \
    --location="global" \
    --workload-identity-pool="POOL_ID" \
    --issuer-uri="ISSUER_URI" \
    --attribute-mapping="google.subject=assertion.sub.split('://')[1].split('.')[0]" \
    --project="PROJECT_ID"

向联合主账号授予角色

授权来自受信任池的联合身份调用所需的 Google API。您可以授权特定主体 UUID 或整个池。

如需向特定主体授权(推荐),请执行以下操作:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --role="roles/biglake.viewer" \
    --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/WIF_SUBJECT"

gcloud projects add-iam-policy-binding PROJECT_ID \
    --role="roles/serviceusage.serviceUsageConsumer" \
    --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/WIF_SUBJECT"

将 WIF_SUBJECT 替换为 SAP 端颁发者为工作负载颁发的 UUID。

如需向池中的每个身份授权(限制较少,适用于测试环境),请执行以下操作:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --role="roles/biglake.viewer" \
    --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*"

gcloud projects add-iam-policy-binding PROJECT_ID \
    --role="roles/serviceusage.serviceUsageConsumer" \
    --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*"

将数据发布到 SAP BDC

您可以使用 Google Cloud 控制台或 Google Cloud CLI 发布 Apache Iceberg REST 目录端点或包含 Iceberg 表的 Knowledge Catalog 数据产品。

Iceberg REST Catalog

在发布之前,请验证您的 Iceberg 表是否在其 Iceberg 表元数据中使用 identifier-field-ids 定义了主键,并且至少有一行,因为 SAP BDC 需要这两者才能执行查询。identifier-field-ids 中引用的任何列都必须在 Iceberg 架构中设置为 required: true(不可为 null)。如果您的表没有主键或包含可为 null 的键字段,请参阅更新 Iceberg 表架构以添加主键,使用 BigLake REST API 进行更新。

控制台

  1. 在 Google Cloud 控制台中,前往 Lakehouse 运行时目录 页面。

    前往 Lakehouse 运行时目录

  2. 在导航面板中,展开您的项目,然后选择要用于发布的 Delta 目录(连接目录)。

  3. 点击发布数据产品。

  4. 输入所需的共享详细信息,包括选择要发布的 Iceberg REST 目录。

  5. 点击发布。

gcloud

  1. 验证 Apache Iceberg REST 目录端点是否存在并获取其详细信息:

    gcloud biglake iceberg catalogs describe ICEBERG_CATALOG_ID \
        --project="PROJECT_ID"
  2. 将 Apache Iceberg REST 目录端点发布到 SAP BDC。请注意,连接目录、Iceberg 目录和底层 Cloud Storage 存储桶必须全部位于同一区域。

    gcloud biglake data-product-sharing publish \
        --connection-catalog="projects/PROJECT_ID/catalogs/CONNECTION_CATALOG_ID" \
        --share="SAP_SHARE_NAME" \
        --sap-federated-identity-provider="projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID" \
        --iceberg-catalog="projects/PROJECT_ID/catalogs/ICEBERG_CATALOG_ID" \
        --title="TITLE_TEXT" \
        --short-description="SHORT_DESCRIPTION_TEXT" \
        --description="DETAILED_DESCRIPTION_TEXT" \
        --project="PROJECT_ID"

    发布的 Apache Iceberg REST 目录端点可在 SAP BDC 中检测到,并可作为远程表安装在 SAP Datasphere 中。

    替换以下内容:

    • CONNECTION_CATALOG_ID:在初始设置期间创建的已注册 Delta Sharing 连接目录,用于将数据从 SAP BDC 共享到 BigQuery。它与设置说明中提到的 Delta Sharing 目录相同;您无需再创建一个目录来发布回。
    • PROJECT_NUMBER:您的 Google Cloud 项目编号。--sap-federated-identity-provider 标志必须使用项目编号,而不是项目 ID。
    • POOL_ID:WIF 池 ID。
    • PROVIDER_ID:WIF 提供方 ID。
    • TITLE_TEXT 和 SHORT_DESCRIPTION_TEXT:SAP BDC 中共享的必需显示值。
    • DETAILED_DESCRIPTION_TEXT:可选的详细说明。请勿为简短说明和详细说明输入相同的文本,因为 SAP 会拒绝此操作。如果详细说明包含与简短说明完全相同的子字符串,发布操作也会被拒绝。例如,如果简短说明为 Sales Data,则详细说明 Longer Sales Data details 会因包含 Sales Data 而被拒。不过,可以接受对“较长销售信息”的详细说明。

Knowledge Catalog 数据产品

或者,您也可以发布 Knowledge Catalog 数据产品。数据产品是经过精选的数据资产(例如表或视图)的逻辑分组,这些资产打包在一起,用于解决特定的业务问题。您可以选择特定的 Apache Iceberg 表,将其分组到数据产品中,然后将该精选集合发布到 SAP BDC,而不是发布完整目录。

控制台

  1. 在 Google Cloud 控制台中,前往 Knowledge Catalog 页面。

    前往 Knowledge Catalog

  2. 在导航菜单中,选择数据产品。

  3. 点击要发布的数据产品,打开其详情页面。

  4. 点击共享 ,然后选择发布到 SAP。

  5. 在将数据产品发布到 SAP 窗格中,配置以下字段:

    • 共享名称:输入 SAP BDC 中共享的名称。
    • Delta 目录:选择已注册的 Delta Sharing 连接目录。
    • Workload Identity:选择或输入您的工作负载身份池提供方。
  6. 点击发布。

gcloud

  1. 创建数据产品:

    gcloud dataplex data-products create DATA_PRODUCT_ID \
        --location="LOCATION" \
        --display-name="TITLE_TEXT" \
        --description="SHORT_DESCRIPTION_TEXT" \
        --owner-emails="OWNER_EMAIL" \
        --project="PROJECT_ID"

    --display-name 映射到 SAP BDC 中的 title,--description 映射到 short_description。

  2. 将由 Lakehouse 管理的 Apache Iceberg 表资产关联到数据产品:

    gcloud dataplex data-products data-assets create DATA_ASSET_ID \
        --data-product="DATA_PRODUCT_ID" \
        --location="LOCATION" \
        --resource="//biglake.googleapis.com/projects/PROJECT_ID/catalogs/ICEBERG_CATALOG_ID/namespaces/NAMESPACE_NAME/tables/TABLE_NAME" \
        --project="PROJECT_ID"

    在数据产品中配置资产时,表资产必须在其 Iceberg 表元数据中使用 identifier-field-ids 定义主键(所有标识符列均标记为 required: true),并且至少有一行。如果您的表没有主键或包含可为 null 的键字段,请参阅更新 Iceberg 表架构以添加主键,使用 BigLake REST API 进行更新。单个数据产品中的所有数据资产都必须属于同一个 Apache Iceberg REST 目录。一个数据产品最多可以包含 50 个表,并且必须至少包含一个有效的数据资产才能发布。Iceberg 表可能不会立即显示在 Google Cloud 控制台中。

  3. 可选:验证数据产品中的资产:

    gcloud dataplex data-products data-assets list \
        --data-product="DATA_PRODUCT_ID" \
        --location="LOCATION" \
        --project="PROJECT_ID"
  4. 将数据产品发布到 SAP BDC。确保连接目录、数据产品和底层资源位于同一区域。

    gcloud biglake data-product-sharing publish \
        --connection-catalog="projects/PROJECT_ID/catalogs/CONNECTION_CATALOG_ID" \
        --share="SAP_SHARE_NAME" \
        --sap-federated-identity-provider="projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID" \
        --data-product="projects/PROJECT_ID/locations/LOCATION/dataProducts/DATA_PRODUCT_ID" \
        --project="PROJECT_ID"

    发布的数据产品可在 SAP BDC 中发现,并可作为远程表安装在 SAP Datasphere 中。在 SAP BDC 中,发布的数据产品会沿用创建 Knowledge Catalog 数据产品时设置的标题和简短说明。

    替换以下内容:

    • CONNECTION_CATALOG_ID:在初始设置期间创建的已注册 Delta Sharing 连接目录,用于将数据从 SAP BDC 共享到 BigQuery。它与设置说明中提到的 Delta Sharing 目录相同;您无需再创建一个目录来发布回。
    • PROJECT_NUMBER:您的 Google Cloud项目编号。sap-federated-identity-provider 必须使用项目编号,而不是项目 ID。
    • POOL_ID:WIF 池 ID。
    • PROVIDER_ID:WIF 提供方 ID。
    • DATA_PRODUCT_ID:Knowledge Catalog 数据产品的 ID。
    • LOCATION:Knowledge Catalog 数据产品的位置。
    • SAP_SHARE_NAME:SAP BDC 中的共享名称。

访问 SAP BDC 中的 Google Cloud 数据

将数据发布到 SAP BDC 后,您可以在 SAP 环境中以原生方式访问 Google Cloud 数据。如需详细了解如何在 SAP 中安装和使用数据产品作为远程表,请参阅 SAP 文档中的安装数据产品。

后续步骤