BigQuery エクスポートされた Analytics のデータを、生成 AI を活用して簡単に分析したい
背景
Google のアプリ計測ソリューション「Google Analytics for Firebase」(以下、Analytics と省略します)には、アプリから送信されたイベントを BigQuery にエクスポートする機能がある。それにより、アプリの画面遷移や操作内容について、自由に様々な分析ができる。
課題
BigQuery の SQL は難しい
しかし私は BigQuery エクスポートされた Analytics のデータに対する SQL をスムーズに書くことができない。多くの列があるが、すべてを暗記していない。また時刻の取り扱いも覚えていないので、毎回調べている。また WITH 句などのサブクエリを使う SQL が必要な時は頑張って考えている。
多くのメンバーにデータ分析に参加してほしい
アプリサービスを運用するにあたり、多くのメンバーが思いついた仮説をデータで裏付けた上で、アイディアを提案してほしい。SQL に抵抗がない人、得意な人だけがそれを行うと、その人が退職や異動になってしまうと、データに基づく意思決定をする文化があっても失われてしまう懸念がある。よって Analytics や SQL の基本的な知識のレクチャーだけで、だれでもデータ分析できるチーム体制を作りたい。
関連する発表
DroidKaigi 2024 で、こちらの発表を行いました。
このスクラップの予備知識としては
の28〜50ページになります。Gemini in BigQuery が上記課題に対するソリューションになるか検証を開始した
初期設定を行う
管理者は Gemini in BigQuery の pre-GA 登録フォームに記入する必要があります。
注: SQL コードの生成とデータキャンバスは、すべてのプロジェクトで使用できます。これらの機能を利用するのにアクセスをリクエストする必要はありません。
と書いてあるので、登録フォームには記入しない。
Google Cloud コンソールで [BigQuery] ページに移動します。
鉛筆っぽいマークから「続行」をクリック
Gemini for Google Cloud API の「有効にする」をクリック
権限は(省略可)と書いていたので、いったんそのまま進んでみる。
Gemini で SQL を生成できるようになった。
Gemini で SQL を生成する
クエリは「直近1週間の日時、 user_pseudo_id 、機種名の一覧が見たい」
SQL が生成された
余談
このクエリを調べたい理由は DroidKaigi 2024 の発表におけるこちらのご意見に対する調査のため。
生成された SQL は間違えている
SELECT
DATE(TIMESTAMP_MILLIS(event_timestamp)) AS event_date,
user_pseudo_id,
device.mobile_model_name
FROM
`tfandkusu-ga913.analytics_454428616.events_20240914`
WHERE DATE(TIMESTAMP_MILLIS(event_timestamp)) BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY) AND CURRENT_DATE();
実行するとエラーになる
TIMESTAMP value is out of allowed range: from 0001-01-01 00:00:00.000000+00 to 9999-12-31 23:59:59.999999+00.; while executing the filter on column 'event_timestamp'; Column 'event_timestamp'
日時に関する処理の間違い
- 欲しいのは日付で無く日時
- event_timestamp 列はミリ秒でなくマイクロ秒の UNIX 時間
テーブル指定の間違い
BigQuery エクスポートされた Analytics のデータは1日1テーブルなので、テーブル名の 20240914
の部分を *
にして、WHERE 句で _TABLE_SUFFIX
を使う必要がある。
ChatGPT に SQL を作らせる
使用モデルは GPT-4o
クエリは「Analytics のデータがエクスポートされた BigQuery から「直近1週間の日時、 user_pseudo_id 、機種名の一覧」を見るSQLを作ってください。Google Cloud プロジェクトは tfandkusu-ga913、データセット名は analytics_454428616 です。」
SELECT
TIMESTAMP_MICROS(event_timestamp) AS event_datetime,
user_pseudo_id,
device.mobile_device_info AS device_name
FROM
`tfandkusu-ga913.analytics_454428616.events_*`
WHERE
event_date BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)) AND FORMAT_DATE('%Y%m%d', CURRENT_DATE())
ORDER BY
event_datetime DESC;
間違いがひとつだけあり、device.mobile_device_info
のところを mobile_model_name
に変更する必要がある。
あとは正しい。結果も正しく出た。
結論
冒頭に記載した課題は現状の Gemini in BigQuery では解決できない。Google Analytics for Firebase, BigQuery, Gemini はすべて Google の製品なので、正しい SQL を生成してほしかった。
今後の予定
サードパーティー製品または自作で自然言語から BigQuery の SQL を作成して、結果を表示および可視化する手段を探す。Analytics や SQL の基本的な知識のレクチャーだけで、だれでも利用できる提供形態にしたい。