Cloud Dataflow SQL眺めてみた


  • 使ってみた・ドキュメント眺めただけです
  • Cloud Dataflow SQLはアルファです(2020/02時点)

Cloud Dataflow SQLとは

  • BigQueryのUIから、Cloud Dataflowジョブを作成する機能です
  • SQLを書くだけで、Pub/Sub・BigQuery・Cloud Storageのデータを組み合わせて、BigQueryのテーブルに書き出せます(※)
  • 内部的にはBeam SQLで処理しているらしいです

※ チュートリアルはPub/SubとBigQueryのJOINですが、リファレンスではPub/Subのメッセージ同士のJOINをしています

使ってみる

チュートリアルでは、以下の作業を行います:

  1. BigQueryのテーブル作成・データ登録(通常のBigQueryで使う時と同じです)
  2. Data Catalogに、Pub/Subメッセージの情報を登録
  3. BigQuery UIから、Pub/SubトピックをDataflowソースとして登録
  4. BigQuery UIから、SQLを実行
  5. Pub/Subメッセージをpublish

Dataflowジョブの開始時にサブスクリプションが作られ、そこからメッセージがpullされます。ジョブ実行前にpublishされたメッセージは無視されるので、気をつけませう。

制限

現時点で、結構制限があります。

  • 読み込みはPub/Sub・BigQuery・GCS、書き込みはBigQueryだけ
    • (日本語版ドキュメントだとGCSの記載はないですが、英語版だと可能とあります)
    • 普通のBeam/Dataflowはより多くのサービスと接続(S3とかDatastoreとか)出来ます
  • GCSファイルはヘッダーありのCSVのみ
  • Pub/SubメッセージはJSON、かつスキーマが事前定義されている
  • Dataflow workerのスケールのコントロールは出来ない
    • 上限設定出来ないのは怖いかも
  • Dataflow jobをdrain出来ない
    • ただし、Dataflow画面からはdrain選べ、停止も出来ます‥保証してないという意味?

出来ないとは書いていないが、出来なさそうな点

  • 書き出し先のデータセット・テーブル名は固定?
    • Beam/Dataflowでは、メッセージの中身に応じて書き込み先を変更することが出来ます(Dynamic Destinationという機能)

SQL

Dataflow SQLは、BigQueryと同じくZetaSQLをベースとしていますが、いくつか違いがあるようです。