Dataformとは? GA4・BigQueryとの連携方法を解説

Google Dataformとは? 

Google Dataformとは、一言でいえば「BigQuery内でのデータ加工・整理(ELTの『T』=Transform)を、効率化・管理するためのフルマネージドツール」となる。ざっくりと要約すると、大量のRowデータを、クエリしやすく、またBIツールで使いやすい形にするために「データマート」へ変換するためのツールといってよい。当記事では主にBigQueryにエクスポートされたGA4のデータを取り扱う上でDataformがどのように役に立つのか、またその必要性について最小限のトピックに限定して解説する。

GA4・BigQuery・Dataformの連携

  1. GA4(Google アナリティクス 4)
    主な役割:データの発生源(データソース)
    詳細説明:ウェブサイトやアプリ上のユーザー行動(ページビュー、クリック、購買など)をイベントデータとして計測する役割を持つ。GA4単体の画面でもレポートは確認できるが、標準機能ではデータの保持期間に制限があり、高度なカスタマイズ分析には向かない。そのため、本アーキテクチャでは生データ(Rawデータ)を外部へ出力するための「データの起点」として機能する。
  2. BigQuery
    主な役割:データの蓄積・保管(データレイク/DWH)および 高速な計算エンジン
    詳細説明:GA4から自動転送されてくる膨大な生ログをすべて受け止める巨大なストレージで。BigQueryの最大の特徴は、単なるデータの置き場所にとどまらず、テラバイト・ペタバイト級のデータに対しても数秒でクエリを処理できる点にある。また、Dataformから送られてくるSQLの実行命令を受け、完成したクリーンなデータ(データマート)を再度自分の内部に保存し、後続のBIツールへ提供する役割を担う。
  3. Dataform
    主な役割:データ加工(ELT)の自動化・データOpsの司令塔
    詳細説明:BigQueryに届いたばかりの、扱いづらいGA4生データ(日付シャードテーブルやネスト構造)を、ビジネスで使える綺麗な形に変換する役割を持つ。Dataform自体はデータベースを持たないため、BigQueryに対してSQL(SQLX)の指示を送り、データのクレンジングやパーティションテーブルへの複製、データマートの作成をコントロールする。テーブル同士の依存関係を自動で計算して実行順序を最適化するほか、開発環境と本番環境の安全な切り分け、変更履歴の管理(Git連携)など、データ開発全体のガバナンスと安全性を担保する司令塔の役割を果たす。
  4. Data Studio(Looker Studio)
    主な役割:データの視覚化(BIレポート)
    詳細説明:DataformによってBigQuery内に美しく整理されたデータマートを読み込み、グラフや表などのダッシュボードとして画面に描写する役割を持つ。生データを直接読み込ませるのではなく、Dataformが作成した軽量な「パーティション化されたマート」をピンポイントで参照させることで、表示速度が劇的に高速化し、BigQueryのクエリコストも最小限に抑えることができる。

GA4・BigQueryにDataformが必要な理由

GA4とBigQueryを連携させると、自動でGA4のデータがBigQueryにエクスポートされる。これによってBigQueryにGA4のデータセットが作成され、そのデータセットにはシャーディングテーブル([PREFIX]_YYYYMMDD などの名前の接頭辞を使用して複数のテーブルにデータを格納する方法)としてデータが日次で格納される。つまりこの日次のシャーディングテーブルにGA4のRowデータが格納されていくことになる。

GA4のデータ分析ではこのBigQueryにエクスポートされたシャーディングテーブルに対してクエリすることで分析が可能になるが、この分析対象となるシャーディングテーブルは整形がされていないRowデータとなるため、分析するにあたりいくつかの不都合が生じることになる。

データマート作成に必須

データマートとは整形された最小限のデータだけが格納されたテーブルのことで、このように対象とするデータ分析をする際に、必要としない不要なデータはカットしたテーブルのことをデータマートという。データマートを作成しなければ、アウトプットしたい処理結果を得るためのクエリ処理を都度、実行しなければならず、その分、クエリ抽出料金がかかってしまうことになる。事前にアウトプットに必要なクエリ処理が済んでいれば、そのクエリ処理が済んでいるデータマートに対して、単純なSELECT文を実行するだけで結果を得られるため、クエリ抽出料金の節約やレスポンスの劇的な改善が見込める。すなわち、このようなデータマートを作成するにあたってのデータパイプラインを構築するためのツールがDataformとなる。

Dataformの概要

ここではDataformの機能を全て解説するのではなく、BigQueryにエクスポートされたGA4のデータパイプライン構築に必要な知識のみに絞って解説を行う。また、GA4のデータマートを作成するにあたってのデータパイプライン構築にDataformの公式ヘルプを全て理解する必要は全くなく、必要なトピックだけを完結に理解しやすいように解説する。

BigQueryとDataformの関連性

Dataformは簡単に言うとデータマートを作成するためのデータパイプライン構築ツールとなるが、BigQueryとどのようにデータが関連付けられるのかをここでは簡単に解説する。Dataformはデータパイプライン構築ツールであり、その定義をDataformで構築していくことになる。つまり定義はDataformで記述され、その定義から実体化されたテーブルがBigQueryに保存されるという関連性になる。つまり、Dataform自体がデータを保持したり処理したりするわけではなく、記述された定義に基づいてBigQuery側でクエリが走り、テーブルやビューがBigQuery上に実体化されるという関係性になる。

Dataformのプロジェクト構成

definitions ディレクトリ構成

definitionsディレクトリにはGA4のデータを各階層ごとに処理しデータを格納していく。つまり、GA4のデータ分析基盤を構築するにあたっては3層構造で構成される。このデータフローをデータパイプラインといい、このデータフローの処理をBigQueryだけで構築しようとしてもクエリのスケジューリング機能を使うことになり、ごく単純なパイプランの構築であればこと済むが、Dataformを活用することでこのようなデータパイプラインの構築を煩雑化せずに管理することができるのがDataformを採用するメリットといえる。

データパイプラインの3層構造を構築するにあたり、その目的は最終的なアウトプットテーブルとなるデータマートを作成するためとなる。このデータマートとGoogle データポータル(Looker Studio)を接続することで、クエリ処理を走らせる必要性がなくなるため、高速なレスポンスとクエリ抽出料金を節約することが可能となる。

3層構造を構成するにあたり、ここではGoogle Dataformの公式ヘルプに記載がある名称を採用するが、definitionsディレクトリ配下のフォルダ名称は固定ではないので随時変更しても構わない。

  1. sources(raw層)
    この層には加工されていないデータを格納するのみとなる。GA4のデータはBigQueryに日次で分割されたシャーディング テーブルとして格納されるが、ここではそのテーブルに対して直接アクセスするのではなく、Dataformでパーティショニングテーブルとしてコピーしてraw層であるテーブルを生成する。これにより、元のテーブルを誤って破壊するリスクを避けられる。
  2. intermediate(staging層)
    この層では、sources層で生成されたテーブルを元データとして、中間テーブルを生成する層となる。BigQueryにエクスポートされたデータ及び、コピーしたraw層のデータはネスト構造のままのテーブル構成となっている。ネスト構造のテーブルからデータを抽出するにあたってはアンネストしなければならないが、このUNNEST処理を次のデータ層であるoutputs層で都度、記述するのではなく、このintermediate層でUNNESTされたテーブルを作成することでUNNEST処理を次のステージング層で不要にすることができる。このintermediate層ではGA4のテーブルをUNNESTしフラットにすることが目的となる。
  3. outputs(mart層)
    intermediate層で生成されたテーブルを元に、アウトプットに必要なクエリ処理を記載していく。既にUNNESTされた状態のテーブルであるため、処理コストを低く抑えることができる。データポータル(Looker Studio)は、この層で作成されたテーブル(データマート)と接続することとなる。

SQLXファイル

Dataformの根幹を支えるのが、.sqlx(エスキューエルエックス) という拡張子を持つファイルとなる。SQLXファイルとは「BigQueryの標準SQLに、Dataform独自の強力な『設定』をドッキングさせた上位互換のSQLファイル」といってよい。.sqlxファイルは、「configブロック(定義)」と「本文(通常のSQL)」の2つのエリアで構成されconfigブロックにより、ファイル間の依存関係を定義したり、SQLの結果をBigQueryにどのようにエクスポートするかなどの定義付けをすることができる。

config ブロック

-- ① 設定エリア(Dataformへの指示をここに書く)
config {
  type: "table",
  schema: "my_dataset"
}

-- ② SQL本文エリア(BigQueryへのクエリをここに書く)
SELECT
  user_id,
  COUNT(1) AS pv
FROM
  `project.dataset.events`
GROUP BY 1

configブロックは、Dataformに対して「このファイルは、どんな性質のテーブルを、どこに、どんなルールで作成するか」を伝える指示書(メタデータ設定領域)である。具体的には、作成するオブジェクトのタイプ(テーブルやビューなど)、出力先となるデータセット(スキーマ)名、データの依存関係などをここで定義する。

  • type(出力の形式)
    このファイルを実行した結果、BigQueryに「何」を作るかを指定する最も重要なプロパティとなる。
    ・table: データを物理テーブルとして新規作成・上書きする。

    ・view: 仮想的なビューテーブルを作成する。
    ・incremental: 新しく届いた差分データ(前日分など)だけを、既存テーブルの末尾に自動で追記する。
    ・operations: 手動で記述したSQL(CREATE TABLE IF NOT EXISTS や DELETE など)をそのまま実行する。

  • schema(出力先データセット名)
    作成したテーブルを、BigQueryのどのデータセットに格納するかを指定する。Dataformでは、BigQueryの「データセット」を「スキーマ(schema)」と呼び換えて記述するルールである。
  • name(テーブル名)
    BigQueryに実際に作られる物理テーブルの名前を指定する。
  • tags(グループ化の付箋)
    ファイルに対して任意の識別用ラベル(タグ)を複数付与できるプロパティである。主に以下の2つの用途で重宝される。
  • dependencies(実行順序の明示)
    「Aテーブルの処理が完全に終わったあとに、この処理を動かす」という実行順序(依存関係)を、明示的に繋ぎたいときに使用するプロパティ。

関連記事

BigQuery workflowsでGA4スキーマ履歴を管理

BigQuery 会話型分析の設計とデータパイプライン構築 – 生成AIを活用したデータ分析

Search ConsoleのデータをBigQueryにエクスポートする全手順

おすすめ記事

最近の記事
おすすめ記事
  1. [BigQuery] AI.KEY_DRIVERS:GA4セッション数 増加の主要因分析

  2. BigQuery 会話型分析の設計とデータパイプライン構築 – 生成AIを活用したデータ分析

  3. BigQuery パイプラインによるクエリ処理の定期実行

  1. 【GA4 SQL】ランディングページのセッション数を集計

  2. 【GA4 SQL】ページの前後をBigQueryから取得

  3. BigQueryのWITH句(CTE)とサブクエリの使い分け

PAGE TOP