イベント ドリブン転送
BigQuery Data Transfer Service を使用すると、イベント通知に基づいてデータを自動的に読み込むイベント ドリブン転送を作成できます。費用対効果を最適化する増分データ取り込みが必要な場合は、イベント ドリブン転送を使用することをおすすめします。
イベント ドリブン転送を設定すると、各データ転送間に数分の遅延が発生する可能性があります。データをすぐに利用できるようにする必要がある場合は、可能な限り最小のレイテンシでデータを BigQuery に直接ストリーミングする Storage Write API を使用することをおすすめします。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 のイベント ドリブン転送を構成する前に、次の対応をしておく必要があります。
通知を受け取るプロジェクトの 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.get
storage.buckets.update
IAM 事前定義ロール
pubsub.admin
とstorage.admin
には、Cloud Storage のイベント ドリブン転送を構成するために必要なすべての権限があります。詳細については、Pub/Sub のアクセス制御をご覧ください。
Cloud Storage で Pub/Sub 通知を構成する
Cloud Storage で Pub/Sub の前提条件を満たしていることを確認します。
通知構成を 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 以外の方法で通知構成を追加することもできます。詳細については、通知構成を適用するをご覧ください。
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
トピックに pull サブスクリプションを作成します。
gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic=TOPIC_NAME
SUBSCRIPTION_ID
は、新しい Pub/Sub プル サブスクリプションの名前または ID に置き換えます。他の方法を使用して pull サブスクリプションを作成できます。
サービス エージェントの権限を構成する
プロジェクトの BigQuery Data Transfer Service エージェントの名前を確認します。
[IAM と管理] ページに移動します。
[Google 提供のロール付与を含める] チェックボックスをオンにします。
BigQuery Data Transfer Service エージェントが
service-<project_number>@gcp-sa-bigquerydatatransfer.s3ns-system.iam.gserviceaccount.com
という名前で表示され、BigQuery Data Transfer Service エージェントのロールが付与されています。
サービス エージェントの詳細については、サービス エージェントをご覧ください。
BigQuery Data Transfer Service エージェントに
pubsub.subscriber
ロールを付与します。Cloud コンソール
Trusted Cloud コンソールによるアクセス制御の手順に沿って、BigQuery Data Transfer Service エージェントに
Pub/Sub Subscriber
ロールを付与します。このロールは、トピック、サブスクリプション、プロジェクト レベルで付与できます。gcloud
CLIポリシーの設定の手順で、次のバインディングを追加します。
{ "role": "roles/pubsub.subscriber", "members": [ "serviceAccount:project-PROJECT_NUMBER@gcp-sa-bigquerydatatransfer.s3ns-system.iam.gserviceaccount.com" }
PROJECT_NUMBER
は、作成および請求される転送リソースをホストするプロジェクト ID に置き換えます。割り当て使用量の帰属: BigQuery Data Transfer Service エージェントが Pub/Sub サブスクリプションにアクセスすると、割り当て使用量はユーザー プロジェクトに対して課金されます。
BigQuery Data Transfer Service エージェントに
pubsub.subscriber
ロールが付与されていることを確認します。Trusted Cloud コンソールで、[Pub/Sub] ページに移動します。
イベント ドリブン転送で使用した Pub/Sub サブスクリプションを選択します。
情報パネルが表示されていない場合は、右上隅にある [情報パネルを表示] をクリックします。
[権限] タブで、BigQuery Data Transfer Service のサービス エージェントに
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.s3ns-system.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 Data Transfer Service が通知を送信するように Cloud Storage を自動的に構成するのに十分な権限があります。
Cloud Storage 管理者(roles/storage.admin
)と Pub/Sub 管理者(roles/pubsub.admin
)でない場合は、代わりに、ロールの付与を管理者に依頼するか、イベント ドリブン転送を作成する前に、必要な Cloud Storage 構成の Pub/Sub 通知とサービス エージェントの権限構成を完了するように管理者に依頼する必要があります。