BigQuery Workflows を試してみる。

g-genさんの記事

引用
| BigQuery workflows は BigQuery Studio(BigQuery の Web コンソール画面)組み込みのワークフロー機能です。コーディングなしに、GUI 上で、SQL スクリプトや Python notebook、データキャンバス、前述の data preparation を実行するワークフローを構築し、スケジューリングできます。さらに、ワークフローは Dataform や Composer 用にエクスポートできます。
従来から存在する Scheduled query は手軽である一方、単発の単純な SQL 実行に特化しており、複雑なワークフローを実行するには Dataform や Composer などのワークフローツールを用いる必要がありました。BigQuery workflows は、Scheduled query とこれらのワークフローツールの中間に位置するツールになると考えられます

項目 | Scheduled Query | BigQuery Workflows |
---|---|---|
実行内容 | 単純なSQLスクリプトの実行 | SQLスクリプト、Pythonノートブック、データキャンバス、データ準備 |
コーディング要否 | 必要(SQLのみ) | 不要(GUIでワークフロー構築可能) |
スケジューリング | 可能 | 可能 |
複雑なワークフロー | 不向き | 複雑なワークフローの構築に対応 |
外部ツール対応 | DataformやCloud Composerなどが必要 | DataformやCloud Composerにエクスポート可能 |
位置づけ | 単発のSQL実行に特化 | Scheduled Queryと外部ワークフローツールの中間的なツール |

公式ドキュメント

BigQuery Workflowsは、BigQueryで複雑なデータワークフローを構築・管理できる機能です。SQLスクリプトやPythonを使用し、GUI上でコーディング不要のワークフロー作成が可能です。これにより、データパイプラインの自動化やスケジューリングが容易になり、DataformやCloud Composerと統合することもできます。簡単なクエリ実行から高度なワークフローまで対応し、データ処理の効率を向上させます。詳細は公式ページで確認できます: BigQuery Workflows.

Dataform を利用しており、スケジュール作成時に選択したDataformサービスアカウントによって実行される。

チュートリアル

ウェルカムページにメニュー追加されてる

API無効だよの表示。
有効にするボタンはまだ用意されていない様子

Dataform API 有効にしたらOKそう

サービスアカウントの選択でdataformのデフォルトサービスアカウントが表示されない。

サービスアカウントを作ってみる
roles/iam.serviceAccountUser
roles/bigquery.jobUser
roles/bigquery.dataViewer
roles/bigquery.dataEditor
roles/aiplatform.notebookExecutorUser
roles/iam.serviceAccountTokenCreator
roles/storage.admin

gcloud iam service-accounts create dataform-sa \
--description="Service account for Dataform" \
--display-name="Dataform Service Account"
gcloud projects add-iam-policy-binding any-development \
--member="serviceAccount:dataform-sa@any-development.iam.gserviceaccount.com" \
--role="roles/iam.serviceAccountUser"
gcloud projects add-iam-policy-binding any-development \
--member="serviceAccount:dataform-sa@any-development.iam.gserviceaccount.com" \
--role="roles/bigquery.jobUser"
gcloud projects add-iam-policy-binding any-development \
--member="serviceAccount:dataform-sa@any-development.iam.gserviceaccount.com" \
--role="roles/bigquery.dataViewer"
gcloud projects add-iam-policy-binding any-development \
--member="serviceAccount:dataform-sa@any-development.iam.gserviceaccount.com" \
--role="roles/bigquery.dataEditor"
gcloud projects add-iam-policy-binding any-development \
--member="serviceAccount:dataform-sa@any-development.iam.gserviceaccount.com" \
--role="roles/aiplatform.notebookExecutorUser"
gcloud projects add-iam-policy-binding any-development \
--member="serviceAccount:dataform-sa@any-development.iam.gserviceaccount.com" \
--role="roles/iam.serviceAccountTokenCreator"
gcloud projects add-iam-policy-binding any-development \
--member="serviceAccount:dataform-sa@any-development.iam.gserviceaccount.com" \
--role="roles/storage.admin"

設定項目は全て設定できた様子。
機械学習は今回しないのでNotebook options は無視

Query タスクを追加し、「EDIT QUERY」を選択すると新しいクエリ編集タブが開く

データセットがマルチリージョン、workflow がシングルリージョンなのでエラーになるらしい。

us-central1 にデータセットをコピーして対応

適当に処理を作る

スケジュールを設定可能

実行履歴も確認可能
UIはDataformの実行履歴と同一

設定タブにDataform repository IDはあるものの、Dataform側では確認できない。
エクスポート機能は今後対応ということだろう

まとめ
クエリを実行しながらワークフローを組めるのはアドホックな分析に向いている。
Notebookとクエリを合わせたワークフローが組めるので、機械学習の前処理の定期的な実行などを簡単に設定できる。
クエリの依存関係は表示できるが、Dataform のコンパイルグラフのようにテーブルの依存関係は表示されない。
Dataform や Composer へのエクスポート機能はまだ使えないため、バージョン管理は難しい。(今後対応されるはず)
今回のリリースとは関係なく、前々から思っていたのですが、Dataformでクエリを複数実行する際に、Dataform ジョブ全体の費用が手軽にわかったらいいのになと思います。