見出し画像

【BigQuery】中間テーブルを作成して、コスト削減を抑え、クエリ処理速度を速める

はじめに

Google Analytics 4 (GA4) からエクスポートされたデータをBigQueryで扱う際、データの効率的な管理はコスト削減とパフォーマンス向上の鍵となる。

毎日のバッチ処理で全データセットに対してクエリを実行することは、特に大容量のデータが関わる場合、膨大なコストがかかる可能性がある。加えて、GA4からエクスポートされたデータには、過去のデータも含まれており、これらのデータは時間が経過しても変化しない。

この不変の特性を利用して、過去のデータを中間テーブルに保存し、日々のバッチ処理ではこの中間テーブルから必要なデータを取得することが、コスト削減と処理速度の向上につながる。

中間テーブルには一度集約されたデータが保持されるため、毎日のクエリは新たに追加されたデータのみを対象とすることができ、全体のデータ量が大幅に減少する。これにより、BigQueryでのデータ処理にかかるコストを効果的に削減しつつ、データ取得のレスポンス時間も短縮することが可能になる。

したがって、GA4からのデータを扱う際には、過去の静的なデータを中間テーブルに分離し、日々のクエリでは最新のデータにのみ焦点を当てるという戦略が、コストとパフォーマンスの最適化に非常に有効。

前回こちらの記事の最後に記載した、GA4データを使って会員登録イベントの発生した日ごとに、流入元(ソース)別のユニークユーザー数をカウントするSQL文を例に、中間テーブルの作成を進めていく。

SELECT
    DATE(TIMESTAMP_MICROS(event_timestamp), "Asia/Tokyo") AS event_date,
  traffic_source.source AS source, -- トラフィックソースを選択
  traffic_source.medium AS medium, -- トラフィックメディアを選択
  traffic_source.name AS campaign, -- トラフィックキャンペーンを選択
  COUNT(DISTINCT user_pseudo_id) AS users -- ユニークなユーザー数をカウント
FROM
  `analytics_XXXXXXXXX.events_*` -- データセットとテーブルの指定
WHERE
  event_name = 'event_name_signup_complete' AND -- 会員登録イベントをフィルタリング
  _TABLE_SUFFIX BETWEEN '20230801' AND '20240225' -- 分析する日付範囲の指定
GROUP BY
  event_date,
  source,
  medium,
  campaign
ORDER BY
  event_date ASC; -- 会員登録日昇順で並び替え

BigQueryでのコスト確認(概算)

先ほどのSQL文では、約半年にわたる、新規会員登録イベントの流入元を計測している。BigQuery上でこのコードを実行しようとすると、下記のようにクエリの右上に、クエリがスキャンするデータの推定量が表示される。これに基づいて、BigQueryの料金が計算される。


今回のクエリでは、クエリがスキャンするデータ推定量が1.65GBと表示されている。

BigQueryの料金体系は変更される可能性があるため、最新の情報を得るにはGoogle Cloudの公式料金ページを参照する必要があるが、2024年2月時点での概算は下記

BigQueryの料金計算ツールを使って推定することもできる。

今回のクエリで約1GBのデータを処理する場合、その料金はさほど高額にはならない。しかし、このクエリを毎日実行するとなると、過去の不変なデータに対しても毎回クエリを実行することになり、無駄が生じる。なので、、、

続きはこちらで記載しています。


この記事が参加している募集

マーケティングの仕事

今月の振り返り

よろしければサポートお願いします!いただいたサポートはクリエイターとしての活動費に使わせていただきます!