事件導向轉移作業

您可以使用 BigQuery 資料移轉服務建立事件驅動移轉作業,自動根據事件通知載入資料。如果您需要以最經濟實惠的方式擷取資料,建議您使用事件驅動傳輸功能。

設定事件驅動轉移作業時,每筆資料轉移作業之間可能會有幾分鐘的延遲時間。如果您需要立即取得資料,建議您使用 Storage Write API,以盡可能低的延遲將資料直接串流至 BigQuery。Storage Write API 可針對最嚴苛的用途提供即時更新。

在兩者之間做出選擇時,請考量您是否需要以事件驅動轉移作業,優先採用經濟實惠的增量批次擷取作業,或是偏好 Storage Write API 的彈性。

支援事件導向移轉作業的資料來源

BigQuery 資料移轉服務可使用事件驅動移轉功能,搭配下列資料來源:

限制

事件驅動至 BigQuery 的移轉作業有下列限制:

  • 觸發事件驅動移轉後,BigQuery 資料移轉服務會等待最多 10 分鐘,然後才觸發下一次移轉作業,無論是否在該時間內收到事件。
  • 事件導向移轉作業不支援來源 URI 或資料路徑的執行階段參數
  • 同一個 Pub/Sub 訂閱項目無法供多個事件驅動轉移設定重複使用。

設定 Cloud Storage 事件驅動轉移作業

來自 Cloud Storage 的事件驅動轉移作業會使用 Pub/Sub 通知,瞭解來源值區中的物件何時經過修改或新增。使用增量轉移模式時,刪除來源儲存桶中的物件,並不會刪除目的地 BigQuery 資料表中的相關聯資料。

事前準備

設定 Cloud Storage 事件驅動移轉作業前,請務必執行下列步驟:

  1. 針對接收通知的專案啟用 Pub/Sub API。

    啟用 API

  2. 如果您是 Cloud Storage 管理員 (roles/storage.admin) 和 Pub/Sub 管理員 (roles/pubsub.admin),請繼續建立事件驅動轉移設定

  3. 如果您不是 Cloud Storage 管理員 (roles/storage.admin) 和 Pub/Sub 管理員 (roles/pubsub.admin),請向管理員索取 roles/storage.adminroles/pubsub.admin 角色,或是請管理員完成設定 Pub/Sub設定 Service Agent 權限,然後使用預先設定的 Pub/Sub 訂閱項目建立事件驅動轉移設定

  4. 設定事件驅動轉移設定通知時,所需的詳細權限:

在 Cloud Storage 中設定 Pub/Sub 通知

  1. 請確認您已滿足搭配 Cloud Storage 使用 Pub/Sub 的必要條件

  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 資料移轉服務代理程式名稱:

    1. 前往「IAM & Admin」(IAM 與管理) 頁面。

      前往「IAM & Admin」(IAM 與管理)

    2. 選取「包含 Google 提供的角色授予項目」核取方塊。

    3. 系統會列出 BigQuery 資料移轉服務代理程式,並顯示名稱 service-<project_number>@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com,授予 BigQuery 資料移轉服務代理程式角色

      確認服務帳戶是否具備服務代理人角色。

    如要進一步瞭解服務代理,請參閱「服務代理」。

  2. pubsub.subscriber 角色授予 BigQuery 資料移轉服務代理程式。

    Cloud 控制台

    請按照「透過 Google Cloud 控制台控管存取權」一文中的指示,將 Pub/Sub Subscriber 角色授予 BigQuery 資料移轉服務代理。您可以在主題、訂閱或專案層級授予這個角色。

    gcloud CLI

    請按照「設定政策」中的操作說明,新增下列繫結:

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

    PROJECT_NUMBER 替換為專案 ID,該 ID 會託管建立和計費的轉移資源。

    配額使用歸屬:當 BigQuery 資料移轉服務代理程式存取 Pub/Sub 訂閱時,使用者專案會被收取配額使用費。

  3. 確認 BigQuery 資料移轉服務代理人是否已獲授 pubsub.subscriber 角色

    1. 前往 Google Cloud 控制台的「Pub/Sub」頁面。

      前往 Pub/Sub

    2. 選取在以事件為依據的移轉作業中使用的 Pub/Sub 訂閱項目。

    3. 如果資訊面板未顯示,請按一下右上角的「顯示資訊面板」

    4. 在「Permissions」分頁中,確認 BigQuery 資料移轉服務服務代理人具有 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 管理員 (roles/storage.admin) 和 Pub/Sub 管理員 (roles/pubsub.admin),因此具備足夠的權限,可讓 BigQuery 資料移轉服務自動設定 Cloud Storage 以傳送通知。

如果您不是 Cloud Storage 管理員 (roles/storage.admin) 和 Pub/Sub 管理員 (roles/pubsub.admin),則必須請管理員授予您這些角色,或是請管理員完成必要的 Cloud Storage 設定中的 Pub/Sub 通知Service Agent 權限設定,才能建立事件驅動移轉。