Cloud Storageバケット内のデータが変更や追加された際、そのイベントをトリガーに自動でBigQueryへデータ転送を行うイベントドリブン転送の機能がGAとなったので試してみました!
""イベントドリブン転送では、各データ転送の間に数分間の遅延が生じることがあります"" との記載があるため、低レイテンシでのデータ転送が必要な場合は Storage Write API を使用することをおすすめします。
実際に本ページの動作確認でも約5分の遅延を確認しました。
構成図
準備
1. Cloud Storageバケットを作成
転送元として利用するバケットを作成する。
gcloud storage buckets create gs://m-gouda-demo-bucket --location=asia-northeast1
2. イベント通知を設定
オブジェクト作成イベントをPub/Subトピックに通知するようバケットを構成する。
※同時にオプション指定したPub/Subトピックを作成する。
gcloud storage buckets notifications create gs://m-gouda-demo-bucket --topic=m-gouda-demo-topic --event-types=OBJECT_FINALIZE
結果
etag\. '1'
event_types:
- OBJECT_FINALIZE
id\. '1'
kind\. storage#notification
payload_format\. JSON_API_V1
selfLink\. https://www.googleapis.com/storage/v1/b/m-gouda-demo-bucket/notificationConfigs/1
topic\. //pubsub.googleapis.com/projects/m-gouda/topics/m-gouda-demo-topic
3. Pub/Subサブスクリプションを作成
2で作成したトピックにサブスクリプションを作成する。
gcloud pubsub subscriptions create m-gouda-demo-subscription --topic=m-gouda-demo-topic
Created subscription [projects/m-gouda/subscriptions/m-gouda-demo-subscription].
4. BigQueryデータテーブルを作成
4-1. BigQueryデータセットを新規作成する。
4-2. BigQueryデータテーブルを新規作成する。
5. データ転送を設定
BigQuery Data Transfer Service でデータ転送設定を作成する。
↓ データソースには"イベントドリブン"として3で作成したPub/Subサブスクリプションを指定

↓ データの宛先には4で作成したBigQueryテーブルを指定

動作確認
1. ファイルをアップロード
テスト用csvファイルdemo1.csv をソースバケットにアップロードする。
key1,value1
key2,value2
参考. アップロード画面
2. 結果を確認
約5分後にターゲットのデータテーブルを確認すると、レコードが追加されていることが確認できた。

まとめ
Cloud Storage から BigQuery へのデータ転送について、10分程度の遅延が許容される場合にはこちらのイベントドリブン転送が第一選択肢に挙がってくるなと感じました。
費用の観点でも Storage Write API を使用しないため、データ取り込み料金が基本発生しない点が魅力的です。
