📊

組織の分散しているデータをBigQueryにまとめてLooker Studioで可視化する方法

2023/06/14に公開

アーキテクチャ


(だいぶシンプルにしています。CSVはGCSにある想定です。)

データはCSVデータ(顧客の購買情報をイメージしてください)、Google Analytics、Google 広告のデータがあることを想定しています。

データの流れとしてはBigQuery Data Transfer Service
を活用して一つのDWHにまとめます。
まとめた後はスケジュールクエリでデータマートを作成します。
データマートを作成した後はLooker Studioから接続して可視化します。

課題

企業で蓄積されたデータの多くは、各所に分散して保存されており利用しづらい状況がありました。
また、データを利用するにあたりシステム部に連絡をしてアドホック的にクエリを実施し、データを取得してもらうなどデータ利用者がすぐに利用しづらい状況を仮定します。

目的

分散されたデータを1つのDWHにまとめることで、データ利用者が取り扱いやすい環境を構築します。

BigQuery Data Transfer Serviceについて

BigQuery Data Transfer Service

BigQuery Data Transfer Serviceは、あらかじめ設定されたスケジュールに基づき、BigQueryへの転送処理を自動化することが可能になります。

Google Analytics 4 カスタムディメンション設定

BigQueryでデータを活用しやすくするために事前にカスタムディメンション(ユーザープロパティ)の設定を完了しておきます。
※他のデータと紐づくユニークなユーザーIDが望ましいです。

設定>プロパティ>カスタム定義>右上カスタムディメンションを作成

カスタムディメンションの送信方法についてはこちらを参照してください
Googleタグマネージャー、あるいはgtag.jsでWEBサイトに実装をしデータを送信できる状態にします。

BigQueryでは、user_properties RECORDに格納されます。
[GA4] BigQuery Export スキーマ

フィールド名 データ型 説明
user_properties.key STRING ユーザー
user_properties.value RECORD ユーザー
user_properties.value.string_value STRING ユーザー
user_properties.value.int_value INTEGER ユーザー
user_properties.value.double_value FLOAT ユーザー
user_properties.value.float_value FLOAT このフィールドは現在使用されていません。
user_properties.value.set_timestamp_micros INTEGER ユーザー プロパティが最後に設定された時刻(マイクロ秒単位)。

クエリで取得する場合は、UNNEST関数を利用します。

SELECT
  (SELECT value.string_value FROM UNNEST(user_properties) WHERE key = 'c_customer_id') AS c_customer_id,
  COUNT(distinct user_pseudo_id) AS users
FROM
  `analytics_99999999.events_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20230601' and '20230630'
  AND event_name = 'user_engagement'
GROUP BY 1
ORDER BY 2 DESC

Google Analytics 4 転送設定

先にGCP側でプロジェクトの作成を完了してください。GCP BigQuery


左下の歯車アイコンの設定>プロパティ>BigQuery のリンク>右上のリンクよりGCPのBigQueryと連携します。

連携が完了すると、翌日よりBigQueryにデータが蓄積されます。(例はGoogle提供のサンプルデータ)

Google 広告転送設定

Google 広告の転送
Google 広告の転送設定を完了すると、レポートデータを定期的に読み込むジョブのスケジューリングと管理を自動化できます。

先に下記の3点を完了してください
BigQuery Data Transfer Service の有効化
データセットの作成
Pub/Sub の転送実行通知を設定

転送設定

Google 広告のデータ転送を作成する

1.Google Cloud Console の [BigQuery] ページに移動します。
2.[データ転送] をクリックします。
3.[転送を作成] をクリックします。
4.[ソースタイプ] セクションで、[ソース] として [Google Ads] を選択します。
5.[転送構成名] セクションの [表示名] に、転送名(例: My Transfer)を入力します。転送名には、後で修正が必要になった場合に簡単に識別できる任意の名前を使用できます。
6.[スケジュール オプション] セクションで:
a.[繰り返しの頻度] で、転送を実行する頻度のオプションを選択します。
・カスタム(デフォルト)
・毎日
・オンデマンド
b.[カスタム] または [毎日] を選択した場合は、カスタム スケジュールか有効な時刻をそれぞれ UTC で入力します。
c.デフォルト値([すぐに開始可能])のままにするか、[設定した時間に開始] をクリックします。前に [オンデマンド] を選択した場合、これらのオプションは無効になります。
d.[開始日と実行時間] に、転送を開始する日付と時刻を入力します。[すぐに開始可能] を選択した場合、このオプションは無効になります。

7.[転送先の設定] セクションの [データセット] には、データを保存するために作成したデータセットを選択します。
8.[データソースの詳細] セクションで、次の操作を行います。

9.(省略可)[通知オプション] セクションで:希望する通知にチェックを入れます。

10.保存

必要な権限

転送を作成するユーザーに、次の必要な権限が付与されていることを確認します。

BigQuery Data Transfer Service:
・bigquery.transfers.update(転送を作成する権限)
・bigquery.datasets.get と bigquery.datasets.updateの両方(抽出先データセットに対する権限)
・bigquery.transfers.update 権限、bigquery.datasets.update 権限、bigquery.datasets.get 権限は IAM 事前定義ロール bigquery.admin に含まれています。

下位互換性 ads_AccountBasicStatsのビューの例

たとえば、2022-05-01 で AdWords から Google 広告への移行が発生したとします。次の表に、ads_AccountBasicStats ビューの列を示します。

customer_id metrics_clicks metrics_cost_micros _LATEST_DATE _DATA_DATE
1234567890 1212 430900867 2023-01-31 2022-12-07
1234567890 1163 647597711 2023-01-31 2023-01-06
1234567890 1156 384169744 2023-01-31 2022-12-11
1234567890 1150 372517099 2023-01-31 2022-12-08
1234567890 1058 323873436 2023-01-31 2022-12-07

キャンペーンの掲載結果

Google 広告のサンプルクエリ

次のサンプルクエリでは、過去 30 日間の Google 広告キャンペーンの掲載結果を分析します。

SELECT
  c.customer_id,
  c.campaign_name,
  c.campaign_status,
  SUM(cs.metrics_impressions) AS Impressions,
  SUM(cs.metrics_interactions) AS Interactions,
  (SUM(cs.metrics_cost_micros) / 1000000) AS Cost
FROM
  `DATASET.Campaign_CUSTOMER_ID` c
LEFT JOIN
  `DATASET.CampaignBasicStats_CUSTOMER_ID` cs
ON
  (c.campaign_id = cs.campaign_id
  AND cs._DATA_DATE BETWEEN
  DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY) AND DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY))
WHERE
  c._DATA_DATE = c._LATEST_DATE
GROUP BY
  1, 2, 3
ORDER BY
  Impressions DESC

BigQuery Load Data ステートメント

[Cloud Storage からの CSV データの読み込み]
https://cloud.google.com/bigquery/docs/loading-data-cloud-storage-csv?hl=ja#sql

次の例ではGCSに配置されているcsvを読み込むためのサンプルクエリです。
OVERWRITEを指定した場合上書きされます。INTOで末尾にデータを追加することもできます。
skip_leading_rows=1を指定すると、ヘッダー行がインポートされません。

OVERWRITE
LOAD DATA OVERWRITE mydataset.mytable
FROM FILES (
  format = 'CSV',
  uris = ['gs://bucket/path/file.csv']);
INTO
LOAD DATA INTO mydataset.mytable
FROM FILES (
  skip_leading_rows=1,
  format = 'CSV',
  uris = ['gs://bucket/path/file.csv']);
S3からのロード
LOAD DATA OVERWRITE mydataset.mytable
FROM FILES (
  format = 'CSV',
  uris = ['s3://<S3バケット名>/bq-s3-access/file.csv']);

データマートの作成

上記までで、BigQueryに「GA4のデータ」、「CSVのデータ」、「Google広告のデータ」のテーブルが作成されました。BIツールからそれぞれ別のデータセットとして読み込んでも良いのですが、
直感的に利用できるようにするため、ストアドプロシージャを作成し、スケジュールクエリとして登録します。
BigQueryスケジュールクエリ

Looker StudioからBigQueryに接続

Looker Studio
Looker Studioに接続し、新規のレポートを作成します。

データソースでBigQueryを選択します。

作成したデータセットを選択します。

以上となります。

株式会社マインディア テックブログ

Discussion