GCP

Dataform と Cloud Scheduler/Build で作る本番向け BigQuery パイプライン

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

1. Dataform が担う役割と全体像

Dataform は SQLX(拡張 SQL) と JavaScript によりテーブル・ビューの定義やテストを記述し、依存関係を自動で DAG 化します。これにより手作業で実行順序を管理する必要がなくなり、Git でバージョン管理できるコードベースの ELT が実現します。

1‑1. コンポーネント別の位置付け

コンポーネント 主な役割
Raw 層 Cloud Storage / Pub/Sub から取得した生データを raw_* テーブルに保存
Transform 層 Dataform が SQLX/JS で変換ロジックを実行し、集計テーブル・ビューを生成
Presentation 層 Looker Studio 等が最終ビューを参照してレポート作成
スケジューラ Cloud Scheduler が定期的に dataform run をトリガー
CI/CD Cloud Build または GitHub Actions がテスト・デプロイを自動化

この構成は Google の公式ドキュメントでも推奨されており、Dataform on BigQuery の概要 に詳しく記載されています。


2. Dataform プロジェクトの作成と資産定義

2‑1. 初期化手順とディレクトリ構造

まずは Cloud Shell(またはローカル環境)でプロジェクトを作成します。以下のコマンドは Git リポジトリ と連携した状態で Dataform の雛形を生成し、必要な npm パッケージをインストールする流れです。

ディレクトリ例

2‑2. dataform.jsonpackage.json のポイント

  • dataform.json は BigQuery プロジェクトやデフォルトスキーマ、認証情報を宣言します。
  • package.json に登録したスクリプト (npm run test, npm run run) で CI/CD パイプラインから簡単に呼び出せます。

2‑3. SQLX アセットの書き方(例:生データテーブル)

コードブロックの前に、外部ソースからデータを取得し BigQuery のテーブルとして永続化する 手順であることを説明します。

2‑4. JavaScript アセットでデータ品質テストを定義

JavaScript ファイルは Dataform の assert 関数 を利用して、クエリ結果が期待通りか検証します。ここでは「金額が負のレコードが無いこと」をチェックしています。

2‑5. インクリメンタルビルドの仕組み

ref('table_name') が自動的に DAG のエッジとなり、変更があったノードだけを再実行します。たとえば sales_daily が更新された場合、依存している sales_summary も自動で再計算されます(公式ドキュメント参照: https://cloud.google.com/dataform/docs/reference/config#ref)。


3. クエリ最適化とコスト削減テクニック

BigQuery はスキャンしたデータ量に応じて課金されるため、パーティションクラスタリング を正しく設定するだけで数十%のコスト削減が可能です。Google のベストプラクティス(2024‑2025 年版)によれば、日次パーティションと適切なクラスタキーを組み合わせることで スキャン量を最大 90 % 削減できると報告されています。

3‑1. パーティショニングとクラスタリングの設定例

以下は売上集計テーブル sales_daily に対し、日付でパーティション化し product_id でクラスタリングする構成です。コード前に「どのようなメリットが得られるか」を簡潔に説明します。

3‑2. 増分ロード(CDC)を実現する MERGE 文

フルリロードは毎回全データをスキャンしますが、MERGE を使えば変更があった行だけを処理できます。以下の例では当日分のみを対象に増分更新しています。

効果の根拠
- パーティションプルーニングによりスキャン対象は当日分だけ(約 1/30)
- MERGE による行単位更新で、フルリロードと比べ 80 % 以上 のデータ量削減が期待できます(BigQuery の公式ドキュメント: https://cloud.google.com/bigquery/docs/using-merges)。

3‑3. ベストプラクティスまとめ

項目 推奨設定例 想定効果
日付型カラム partitionBy: {field:"event_date", type:"day"} フィルタで 90 % データ除外可能
高頻度検索キー clusterBy:["user_id"] 同一ユーザー行が近接し、スキャン量削減
大規模テーブル 複合クラスタリング例: ["country","device_type"] 多次元絞り込みで更なるコスト削減

4. スケジューリングと CI/CD の実装

4‑1. Cloud Scheduler と Cloud Build の連携

目的:毎日決まった時刻に Dataform パイプラインを自動実行し、失敗した場合はリトライで耐障害性を確保します。以下の手順では、Scheduler が HTTP リクエストで Cloud Build トリガーを呼び出す構成です。

  • --schedule は cron 形式、タイムゾーンは必ず明示します。
  • --retry-count--max-retry-duration により、エラー時の自動リトライが有効になります。

4‑2. CI/CD パイプライン例(Cloud Build)

ポイント:ビルドステップはすべて公式コンテナ (node:18) を使用し、依存関係インストール → テスト実行 → 本番デプロイの順に進めます。

4‑3. 同様のフローを GitHub Actions で構築する場合

GitHub Actions の設定例です。環境変数 GOOGLE_APPLICATION_CREDENTIALS に GCP サービスアカウントキーを渡す点が重要です。

選択の指針
- Cloud Build は GCP 内で完結するためネットワーク遅延が少なく、IAM 管理が一元化できます。
- GitHub Actions はリポジトリ中心の開発フローに馴染みやすく、外部 CI ツールとの統合が容易です。


5. 可観測性・運用設計(モニタリング・IAM・ロールバック)

5‑1. ログとメトリクスでパイプラインを可視化

Dataform の実行は Cloud Build ステップとして出力され、すべて Cloud Logging に保存されます。以下の手順でカスタム指標を作成し、遅延や失敗をリアルタイムに検知できます。

  1. ログベース指標の作成(Console → Logging → Logs-based metrics)
  2. フィルタ例: resource.type="cloud_build" AND jsonPayload.message:"dataform run"
  3. 指標名: custom_dataform_success_count(成功実行数カウント)

  4. アラートポリシーの設定(Console → Monitoring → Alerting)

  5. 条件例: 過去 5 分間で custom_dataform_success_count < 1 → Slack / Email に通知

詳細は公式ドキュメント「Logging ベース指標とアラート」を参照してください。

5‑2. 最小権限 IAM ロール設計

サービス 推奨ロール(最小権限) 主な権限
BigQuery データセット roles/bigquery.dataEditor(対象データセットのみ) テーブル作成・書き込み
Cloud Build (Dataform 実行) roles/cloudbuild.builds.editor + roles/iam.serviceAccountUser ビルド実行、サービスアカウント使用
Cloud Scheduler roles/cloudscheduler.jobRunner ジョブ起動
Cloud Logging & Monitoring roles/logging.viewer, roles/monitoring.viewer ログ閲覧・メトリクス取得

IAM バインディング例

5‑3. 障害時のロールバック手順

  1. 失敗ジョブを特定:Cloud Logging のエラーログで dataform run ステップ ID を検索。
  2. コードを前バージョンに戻す:Git で対象コミットへチェックアウトし、インクリメンタル実行をリセット。
  3. 再デプロイdataform run --full-refresh(全テーブル再作成)または --reset(増分のリセット)を実行。
  4. 品質検証dataform test で assertions を再度走らせ、期待通りの結果が得られるか確認。


まとめ

  • Dataform は SQL と JavaScript だけで ELT パイプライン全体をコード化し、依存関係・インクリメンタル実行を自動管理できる。
  • パーティション+クラスタリング の適切な設計でクエリスキャン量を最大 90 % 削減し、コストを大幅に抑制可能。
  • Cloud Scheduler + Cloud Build / GitHub Actions による CI/CD は、テスト自動化と本番デプロイの信頼性を向上させる。
  • ログベース指標と最小権限 IAM を組み合わせた可観測性・セキュリティ設計で、障害時も迅速にロールバックできる。

これらのベストプラクティスを自社プロジェクトに取り入れれば、BigQuery と Dataform の連携によるデータ基盤構築が高速かつ安全に進められます。ぜひ実装してみてください。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-GCP