1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Dataformとは?BigQueryパイプライン・スケジュールクエリとの違い

Posted at

はじめに

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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?