はじめに
BigQuery のスケジュールクエリで毎日ジョブを回してたけど、
気づいたらクエリが 20 個、30 個に増えて……
「あれ? これもう人力で管理できなくない?」
そんなときに見つけたのが Dataform でした。
今回は、同じ悩みを持つ人向けに
「Dataform を使うと何が変わるのか?」を、やさしくまとめます。
BigQuery だけで頑張っていた頃
- 毎朝スケジュールクエリが順番に動く
- 一つ失敗すると、全部ズレる
- クエリ修正するとき、どれが依存してるのかわからない
- SQL のコピーがいくつも増えていく
最初は軽い管理で済むけど、
運用が大きくなると「あれ、どこ直せばいいんだ?」状態に。
Dataform って何?
ざっくり言うと、
BigQuery の SQL を、ちゃんとプロジェクトとして整理できるツール。
Dataform を使うと ——
- 依存関係を明示できる
- SQL をフォルダで整理できる
- Git で管理・レビューできる
- 一括実行・ロールバックができる
つまり「SQLを書くだけの世界」から
「SQL をチームで育てる世界」に進化できます。
BigQuery パイプラインとの違い
| 項目 | BigQueryスケジュールクエリ | BigQueryパイプライン | Dataform |
|---|---|---|---|
| 実行順序 | 手動で調整 | 一応調整できるが柔軟性は低い | 依存関係を自動解決 |
| 管理場所 | Console内で分散 | Console内で分散 | 1つのGitプロジェクトで集中管理 |
| 修正の影響 | 変更箇所を追いづらい | 変更箇所を追いづらい | diffで明確に確認可能 |
| 再利用 | コピペ中心 | コピペ中心 | includeや変数設定などで共通化 |
| チーム開発 | 困難 | スケジュールクエリよりはマシだが難しい | 標準機能として前提化 |
実際のイメージ
Dataform のプロジェクトはこんな感じです:
dataform/
├─ definitions/
│ └─ daily_cleanup.sqlx
├─ includes/
│ └─ common_variables.sqlx
├─ dataform.json
たとえば operation の例:
config {
type: "operations",
tags: ["daily"]
}
DELETE FROM `dataset.temp_table`
WHERE date < CURRENT_DATE() - 30;
Dataform で「Run」ボタンを押すだけで、
このSQLがBigQuery上で安全に実行されます。
Dataformのワークフロー機能
Dataform の面白いところは、依存関係を使ってワークフローを構成できる こと。
単純なスケジュール実行ではなく、
「このテーブルが終わったら次を動かす」といった流れを自動で組めます。
A_raw_data → B_clean_data → C_summary_table
dependencies を書くだけで順序が決まる:
config {
type: "operations",
dependencies: ["B_clean_data"]
}
また、Dataform では「全部実行」だけでなく、
特定の定義だけを選んで実行 することもできます。
たとえば開発中は daily_cleanup だけテスト実行、
本番リリースでは全体を Run、というような柔軟な運用が可能。
この “部分実行” と “自動順序制御” の組み合わせが、
スケジュールクエリや BigQuery パイプラインにはない強みです。
もう一歩:Cloud Storage や Cloud Functions と組み合わせる
自分の現場では、
「Cloud Storageにファイルが届いたら → Dataformで整形ジョブを動かす」
という流れにしています。
Dataform 自体は API を提供しているので、
Cloud Functions から呼び出せば自動実行が可能です。
簡略サンプル
import requests
def trigger_dataform_run():
url = "https://api.dataform.co/v1/projects/.../run"
headers = {"Authorization": "Bearer <token>"}
payload = {"environment": "prod"}
requests.post(url, headers=headers, json=payload)
このおかげで、スケジュールだけではなく
「実際にデータが届いたタイミング」で動かせるようになりました。
まとめ
Dataform は「新しい ETL ツール」ではなく、
BigQuery 運用を整理するための仲介役だと思います。
スケジュールクエリが増えすぎて疲れてきたら、
一度 Dataform を触ってみる価値はあります。
🧭 次回予告:Dataform と GitLab の連携運用
ブランチ戦略、レビュー、CI/CD まで、実務でどう回すかを紹介予定です!
参考URL:
https://cloud.google.com/dataform#documentation
https://cloud.google.com/bigquery/docs/pipelines-introduction?hl=ja
https://cloud.google.com/bigquery/docs/scheduling-queries?hl=ja