事件導向移轉作業
您可以使用 BigQuery 資料移轉服務建立事件驅動的移轉作業,根據事件通知自動載入資料。如果您需要以遞增方式擷取資料,並盡可能提高成本效益,建議使用事件驅動型傳輸。
設定事件觸發的轉移作業時,每次資料轉移之間可能會延遲幾分鐘。如需立即取得資料,建議使用 Storage Write API,以盡可能低的延遲時間將資料直接串流至 BigQuery。Storage Write API 可為最嚴苛的用途提供即時更新。
選擇時,請考量您是否需要優先處理成本效益高的增量批次擷取作業 (透過事件驅動的轉移作業),或是偏好使用 Storage Write API 的彈性。
支援事件導向移轉作業的資料來源
BigQuery 資料移轉服務可搭配下列資料來源,使用事件驅動型移轉:
限制
以事件為觸發條件的 BigQuery 移轉作業有下列限制:
- 觸發事件驅動的移轉作業後,無論事件是否在 10 分鐘內抵達,BigQuery 資料移轉服務都會等待最多 10 分鐘,才會觸發下一次移轉作業。
- 事件導向移轉作業不支援來源 URI 或資料路徑的執行階段參數。
- 多個事件驅動的轉移設定無法重複使用相同的 Pub/Sub 訂閱項目。
設定 Cloud Storage 事件驅動型轉移作業
從 Cloud Storage 進行事件驅動移轉時,系統會使用 Pub/Sub 通知,瞭解來源 bucket 中的物件何時經過修改或新增。使用增量移轉模式時,刪除來源 bucket 中的物件不會刪除目的地 BigQuery 資料表中的相關聯資料。
事前準備
設定 Cloud Storage 事件驅動移轉作業前,請先完成下列步驟:
針對要接收通知的專案啟用 Pub/Sub API。
如果您是 Cloud Storage 管理員 (
roles/storage.admin) 和 Pub/Sub 管理員 (roles/pubsub.admin),可以繼續建立事件驅動的移轉設定。如果您不是 Cloud Storage 管理員 (
roles/storage.admin) 和 Pub/Sub 管理員 (roles/pubsub.admin),請要求管理員授予您roles/storage.admin和roles/pubsub.admin角色,或請管理員完成下列章節中的「設定 Pub/Sub」和「設定服務代理程式權限」,並使用預先設定的 Pub/Sub 訂閱項目建立事件驅動的轉移設定。如要設定以事件為依據的移轉設定通知,您必須具備下列權限:
如果您要建立主題和訂閱項目來發布通知,則必須具備
pubsub.topics.create和pubsub.subscriptions.create權限。無論您要使用新的或現有的主題和訂閱項目,都必須具備下列權限。如果您已在 Pub/Sub 中建立主題和訂閱項目,則可能已具備這些權限。
您必須在要設定 Pub/Sub 通知的 Cloud Storage 值區中,擁有下列權限。
storage.buckets.getstorage.buckets.update
預先定義的
pubsub.admin和storage.adminIAM 角色具備設定 Cloud Storage 事件驅動移轉作業的所有必要權限。詳情請參閱 Pub/Sub 存取權控管。
在 Cloud Storage 中設定 Pub/Sub 通知
確認您已滿足搭配使用 Pub/Sub 與 Cloud Storage 的必要條件。
將通知設定套用至 Cloud Storage 值區:
gcloud storage buckets notifications create gs://BUCKET_NAME --topic=TOPIC_NAME --event-types=OBJECT_FINALIZE
更改下列內容:
BUCKET_NAME:要觸發檔案通知事件的 Cloud Storage bucket 名稱TOPIC_NAME:您要接收檔案通知事件的 Pub/Sub 主題名稱
除了 gcloud CLI,您也可以使用其他方法新增通知設定。詳情請參閱「套用通知設定」。
確認 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
為主題建立提取訂閱:
gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic=TOPIC_NAME
將
SUBSCRIPTION_ID替換為新的 Pub/Sub 提取訂閱名稱或 ID。您可以使用其他方法建立提取訂閱項目。
設定服務代理權限
找出專案的 BigQuery 資料移轉服務代理程式名稱:
前往「IAM & Admin」(IAM 與管理) 頁面。
勾選「包含 Google 提供的角色授予項目」核取方塊。
BigQuery 資料移轉服務代理程式會列出名稱
service-<project_number>@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com,並獲派 BigQuery 資料移轉服務代理程式角色 (roles/bigquerydatatransfer.serviceAgent)。
如要進一步瞭解服務代理人,請參閱「服務代理人」。
將 Pub/Sub 訂閱者角色 (
pubsub.subscriber) 授予 BigQuery 資料移轉服務代理人。Cloud 控制台
請按照「透過 Google Cloud 控制台控管存取權」一文中的操作說明,將
Pub/Sub Subscriber角色授予 BigQuery 資料移轉服務代理程式。您可以在主題、訂閱項目或專案層級授予這個角色。gcloudCLI請按照「設定政策」中的操作說明,新增下列繫結:
{ "role": "roles/pubsub.subscriber", "members": [ "serviceAccount:project-PROJECT_NUMBER@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com" }
將
PROJECT_NUMBER替換為建立及計費轉移資源的專案 ID。配額用量歸因:當 BigQuery 資料移轉服務代理程式存取 Pub/Sub 訂閱項目時,配額用量會向使用者專案收費。
確認 BigQuery 資料移轉服務代理已獲派 Pub/Sub 訂閱者角色 (
pubsub.subscriber)。前往 Google Cloud 控制台的「Pub/Sub」頁面。
選取您在以事件為依據的移轉作業中使用的 Pub/Sub 訂閱項目。
如果資訊面板已隱藏,請按一下右上角的「顯示資訊面板」。
在「權限」分頁中,確認 BigQuery 資料移轉服務服務代理程式具有 Pub/Sub 訂閱者角色 (
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 通知和服務代理程式權限設定,您才能建立事件驅動的移轉作業。