事件驱动型转移

您可以使用 BigQuery Data Transfer Service 创建事件驱动型转移,以便根据事件通知自动加载数据。如果您需要可优化成本效益的增量数据注入,我们建议您使用事件驱动型转移。

设置事件驱动型转移时,每次数据转移之间可能会有几分钟的延迟。如果您需要可立即使用数据,我们建议您使用 Storage Write API,该 API 可将数据以尽可能低的延迟时间直接流式传输到 BigQuery 中。Storage Write API 可为要求严苛的应用场景提供实时更新。

在二者之间进行选择时,请考虑您是需要优先使用事件驱动型转移进行经济高效的增量批量注入,还是更偏好 Storage Write API 的灵活性。

支持事件驱动型转移的数据源

BigQuery Data Transfer Service 可以将事件驱动型转移与以下数据源搭配使用:

限制

向 BigQuery 进行事件驱动型转移受以下限制:

  • 事件驱动型转移触发后,BigQuery Data Transfer Service 会等待最多 10 分钟,然后再触发下一次转移运行,无论是否有事件在该时间内到达。
  • 对于来源 URI 或数据路径,事件驱动型转移不支持运行时参数
  • 多个事件驱动型转移配置不能重复使用同一 Pub/Sub 订阅。

设置 Cloud Storage 事件驱动型转移

来自 Cloud Storage 的事件驱动型转移使用 Pub/Sub 通知来了解何时修改或添加来源存储桶中的对象。使用增量转移模式时,删除来源存储桶中的对象不会删除目标 BigQuery 表中的关联数据。

准备工作

在配置 Cloud Storage 事件驱动型转移之前,您必须执行以下步骤:

  1. 为接收通知的项目启用 Pub/Sub API。

    启用该 API

  2. 如果您是 Cloud Storage Admin (roles/storage.admin) 和 Pub/Sub Admin (roles/pubsub.admin),请继续执行创建事件驱动型转移配置

  3. 如果您不是 Cloud Storage Admin (roles/storage.admin) 和 Pub/Sub Admin (roles/pubsub.admin),请让您的管理员为您授予 roles/storage.adminroles/pubsub.admin 角色,或者让您的管理员完成以下部分中的配置 Pub/Sub配置服务代理权限,并使用预配置的 Pub/Sub 订阅创建事件驱动型转移配置

  4. 设置事件驱动型转移配置通知所需的详细权限:

在 Cloud Storage 中配置 Pub/Sub 通知

  1. 确保您已满足将 Pub/Sub 与 Cloud Storage 搭配使用的前提条件

  2. 将通知配置应用于您的 Cloud Storage 存储桶:

    gcloud storage buckets notifications create gs://BUCKET_NAME --topic=TOPIC_NAME --event-types=OBJECT_FINALIZE

    替换以下内容:

    • BUCKET_NAME:您希望触发文件通知事件的 Cloud Storage 存储桶的名称
    • TOPIC_NAME:您希望接收文件通知事件的 Pub/Sub 主题的名称

    您还可以使用 gcloud CLI 以外的其他方法添加通知配置。如需了解详情,请参阅应用通知配置

  3. 验证是否已为 Cloud Storage 正确配置 Pub/Sub 通知。使用 gcloud storage buckets notifications list 命令:

    gcloud storage buckets notifications list gs://BUCKET_NAME

    如果成功,响应类似于以下示例:

    etag: '132'
    id: '132'
    kind: storage#notification
    payload_format: JSON_API_V1
    selfLink: https://www.googleapis.com/storage/v1/b/my-bucket/notificationConfigs/132
    topic: //pubsub.googleapis.com/projects/my-project/topics/my-bucket
  4. 为该主题创建拉取订阅:

    gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic=TOPIC_NAME

    SUBSCRIPTION_ID 替换为新 Pub/Sub 拉取订阅的名称或 ID。

    您可以使用其他方法创建拉取订阅。

配置服务代理权限

  1. 找到项目的 BigQuery Data Transfer Service 代理的名称:

    1. 前往 IAM 和管理页面。

      转到“IAM 和管理”

    2. 选中包括 Google 提供的角色授权复选框。

    3. 系统会列出 BigQuery Data Transfer Service 代理,显示名称 service-<project_number>@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com,并且向其授予 BigQuery Data Transfer Service Agent 角色

      验证服务账号是否具有服务代理角色。

    如需详细了解服务代理,请参阅服务代理

  2. 向 BigQuery Data Transfer Service 代理授予 pubsub.subscriber 角色

    Cloud 控制台

    按照通过 Google Cloud 控制台控制访问权限中的说明,向 BigQuery Data Transfer Service 代理授予 Pub/Sub Subscriber 角色。可以在主题、订阅或项目级授予该角色。

    gcloud CLI

    按照设置政策中的说明添加以下绑定:

    {
      "role": "roles/pubsub.subscriber",
      "members": [
        "serviceAccount:project-PROJECT_NUMBER@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com"
    }

    PROJECT_NUMBER 替换为托管进行创建和计费的转移资源的项目 ID

    配额用量归因:当 BigQuery Data Transfer Service 代理访问 Pub/Sub 订阅时,系统会针对用户项目收取配额用量费用。

  3. 验证 BigQuery Data Transfer Service 代理是否已被授予 pubsub.subscriber 角色

    1. 在 Google Cloud 控制台中,前往 Pub/Sub 页面。

      转到“Pub/Sub”

    2. 选择您在事件驱动型转移中使用的 Pub/Sub 订阅。

    3. 如果信息面板处于隐藏状态,请点击右上角的显示信息面板

    4. 权限标签页中,验证 BigQuery Data Transfer Service 服务代理是否具有 pubsub.subscriber 角色

    验证服务代理是否具有针对订阅的 pubsub.subscriber 角色。

用于配置通知和权限的命令摘要

以下 Google Cloud CLI 命令包含设置通知和权限所需的所有命令(在前面部分进行了详细介绍)。

gcloud

PROJECT_ID=project_id
CONFIG_NAME=config_name
RESOURCE_NAME="bqdts-event-driven-${CONFIG_NAME}"
# Create a Pub/Sub topic.
gcloud pubsub topics create "${RESOURCE_NAME}" --project="${PROJECT_ID}"
# Create a Pub/Sub subscription.
gcloud pubsub subscriptions create "${RESOURCE_NAME}" --project="${PROJECT_ID}" --topic="projects/${PROJECT_ID}/topics/${RESOURCE_NAME}"
# Create a Pub/Sub notification.
gcloud storage buckets notifications create gs://"${RESOURCE_NAME}" --topic="projects/${PROJECT_ID}/topics/${RESOURCE_NAME}" --event-types=OBJECT_FINALIZE
# Grant roles/pubsub.subscriber permission to the DTS service agent.
PROJECT_NUMBER=$(gcloud projects describe "${PROJECT_ID}" --format='value(projectNumber)')
gcloud pubsub subscriptions add-iam-policy-binding "${RESOURCE_NAME}"  --project="${PROJECT_ID}"  --member=serviceAccount:service-"${PROJECT_NUMBER}"@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com  --role=roles/pubsub.subscriber

替换以下内容:

  • PROJECT_ID:您的项目的 ID。
  • CONFIG_NAME:用于标识此转移配置的名称。

创建转移配置

您可以通过创建 Cloud Storage 转移并选择事件驱动作为时间表类型来创建事件驱动型 Cloud Storage 转移。作为 Cloud Storage Admin (roles/storage.admin) 和 Pub/Sub Admin (roles/pubsub.admin),您拥有足够的权限,可让 BigQuery Data Transfer Service 自动配置 Cloud Storage 以发送通知。

如果您不是 Cloud Storage Admin (roles/storage.admin) 和 Pub/Sub Admin (roles/pubsub.admin),则必须让管理员为您授予相应角色,或者让管理员完成所需的 Cloud Storage 配置中的 Pub/Sub 通知服务代理权限配置,然后您才能创建事件驱动型转移。