Open22

BigQuery Workflows を試してみる。

Yuji TsuritaniYuji Tsuritani

引用
| BigQuery workflows は BigQuery Studio(BigQuery の Web コンソール画面)組み込みのワークフロー機能です。コーディングなしに、GUI 上で、SQL スクリプトや Python notebook、データキャンバス、前述の data preparation を実行するワークフローを構築し、スケジューリングできます。さらに、ワークフローは Dataform や Composer 用にエクスポートできます。

従来から存在する Scheduled query は手軽である一方、単発の単純な SQL 実行に特化しており、複雑なワークフローを実行するには Dataform や Composer などのワークフローツールを用いる必要がありました。BigQuery workflows は、Scheduled query とこれらのワークフローツールの中間に位置するツールになると考えられます

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

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

Yuji TsuritaniYuji Tsuritani

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

Yuji TsuritaniYuji Tsuritani

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

Yuji TsuritaniYuji Tsuritani

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

Yuji TsuritaniYuji Tsuritani

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

Yuji TsuritaniYuji Tsuritani
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"

Yuji TsuritaniYuji Tsuritani

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

Yuji TsuritaniYuji Tsuritani

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

Yuji TsuritaniYuji Tsuritani

設定タブにDataform repository IDはあるものの、Dataform側では確認できない。

エクスポート機能は今後対応ということだろう

Yuji TsuritaniYuji Tsuritani

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

今回のリリースとは関係なく、前々から思っていたのですが、Dataformでクエリを複数実行する際に、Dataform ジョブ全体の費用が手軽にわかったらいいのになと思います。