こんにちは。CCIのアナリティクス担当の寺田です。
BigQueryのデータ型、ARRAY型, STRUCT型は慣れれば便利ですが、最初はどう扱っていいか困りませんか?
特にGA4 <---> BigQueryを連携し、BigQueryにエクスポートされてきたGA4アクセスログを分析しよう!とした時、最初にぶつかる壁ではないでしょうか。(N=1, 自分です)
今回は、
の2つをざっくりご紹介したいと思います。
(STRUCT型については近日中に追って書くと思います。。。)
(※ただし値としてARRAYを入れ込むことは出来ない)
--ユーザーごとに購入したitem_idの一覧を作成するサンプルクエリ
WITH array_sample AS (
SELECT 'A1' AS user_id, [101, 102, 103, 104] AS item_ids
UNION ALL
SELECT 'A2' AS user_id, [201, 202, 203, 204, 205] AS item_ids
UNION ALL
SELECT 'A3' AS user_id, [301, 302] AS item_ids
)
SELECT user_id, item_ids
FROM array_sample
ORDER BY user_id
;
ecommerce設定をしているGA4ログデータを処理していると、よくこの形でARRAYが出てきます。
(ちなみにARRAYの作成方法は、[値1, 値2,.........]のように[]で値を囲うと作成できます。
注意点としては、格納する値のデータ型を統一しないとエラーが出ます。今回の例だと格納する値のデータ型はINTEGER(INT64)に統一しています。)
BigQuery公式ドキュメント:Constructing an array
A1さん、A2さん、A3さん分で3レコード出力されます。
(※決して11レコードあるわけではありません)
UNNEST演算子は、上記のようなARRAY型のカラム(=item_ids)に対して力を発揮します!
使いどころとしてはARRAY型のカラム使いにくい!普通のテーブルが欲しい!というケースで使います。
今回の例だと「item_idごとにどのくらいの購入UUがいるのか」、このままのテーブル構造だと集計できませんよね😇
--ユーザーごとに購入したitem_idの一覧を作成するサンプルクエリ
WITH array_sample AS (
SELECT 'A1' AS user_id, [101, 102, 103, 104] AS item_ids
UNION ALL
SELECT 'A2' AS user_id, [201, 202, 203, 204, 205] AS item_ids
UNION ALL
SELECT 'A3' AS user_id, [301, 302] AS item_ids
)
--<ARRAY>item_idsカラムを一組の行に変換(フラット化)する
SELECT user_id, item_id
FROM array_sample
CROSS JOIN UNNEST(item_ids) AS item_id
;
上記サンプルクエリで起こっていることを順番に説明します。
UNNEST 演算子はFROM句で指定したソーステーブル(=array_sample)のARRAY型のカラム(=item_ids)を引数に取ります
受け取ったARRAY(=item_ids)内にある各値を、一組の行に変換(フラット化)します
一組の行に変換(フラット化)したitem_idカラムを、各レコードごとにCROSS JOINします
※正確にはここで行っているCROSS JOINは「相関CROSS JOIN」です
各行の他の列の値を維持したまま ARRAYをバラし、CROSS JOINしてくれます。
各行の他の列の値を維持したまま ARRAYをバラし、CROSS JOINしてくれます。
この表現がわかりにくいので、上の例で翻訳すると、
※「各行」→ユーザーA1さんの行とします
ユーザーA1さんの行に含まれているuser_idカラムの値(=A1)を維持したまま、
ARRAY(=item_ids)をバラしCROSS JOINしてくれます
いずれ
なども書く予定です(いつか......)
BigQuery公式ドキュメント:Correlated join operation
UNNEST演算子でARRAY(=item_ids)を行に変換し、無事フラット化できました!
例えば、item_idごとにどのくらいの購入UUがいるのかを調べるなど、こちらのテーブルのだと集計できそうです!
いかがだったでしょうか。今回は
をご紹介しました。
GA4アクセスログをBigQueryで分析する際には避けられない知識かと思います。
また社内の1st PartyデータをBigQueryに取り込むことにより、GA4アクセスログと1st Partyデータを横断する分析も可能になります。
(なにかしらの突合キーが必要になりますが)
ここまで読んでいただきありがとうございました!😊
📣なお、私も含め、CCI Analyticsを担当するアナリストは現在は「Data Dig(データディグ)」というCookieに依存しないデジタルマーケティング展開の支援も行っています。そのサービスの詳細も「データマーケティング」という形でご案内しており、Data Dig関連サービスとしてどのような資料が存在するか、それらの資料ダウンロードを行えます。
また、デジタルマーケティングに関するコラムなどを展開しています。
📣CCIが提供する統合デジタルマーケティングサービスの全容、また現状のデジタルマーケティング施策のノウハウを認識されたい場合は、ぜひ近日オープンした「KnowHowNow」をご覧ください。