Help us understand the problem. What is going on with this article?

FirebaseのBigQueryを使ってみた

More than 1 year has passed since last update.

Firebaseが登場したので、Google Analyticsから Firebase Analyticsに移行しました。

使い勝手が結構変わりますが、有料プランに入って心置きなく使い倒せるのはFirebaseの方です。
Analyticsの方に入れたデータは勝手にどんどんBigQuery内に溜め込まれており、クエリを発行して欲しいデータを集めることができるようになります。

始め方

Firebaseコンソールから対象のプロジェクトを開き、「Analytics」→「イベント」から画面の下部に行くと
「BigQueryで生のデータを参照」というボタンがあるのでクリック

こんな感じの画面になります

スクリーンショット 2017-04-18 18.05.22.png

はじめはちんぷんかんぷだと思います。(データベースを知らない人はまずそちらの勉強からしないとこの記事は読んでもわからないでしょう…)

見方

画面右下エリアの「Table Details」というところに注目。
すぐ横にテーブル名が選択できるようになっています。
app_events_YYYYMMDD という名前になっているものが、Analyticsイベントで送信したデータが丸っと入っています。ユーザ情報や位置情報、イベント内容など大変多くの情報が入っているので、欲しいものやユーザ紐付けなどは大概できるようになっているはずです。

スキーム

「Scheme」は、テーブルのスキームが書いてあります。と言ってこれだけじゃよくわからないので、こちらのドキュメントがわかりやすいです
https://support.google.com/firebase/answer/7029846?hl=ja

大まかに言うと、ユーザ情報の入った「user_dim」と、イベント情報が入った「event_dim」に分かれています。
データ形式について、「String」「Integer」「Float」は問題ないと思います。
「Record」というのは、まあハッシュというか構造体のようなもの。内部にさらにStringやInteger,Floatなどの構造を持っています。
例えば user_dim.device_info というカラムはRecord型ですが、その中に device_category や、mobile_brand_name といったString型のカラムが存在しています。

SQLのSELECT節に指定するのは、String,Integer,Floatのようなプリミティブな型にする必要があります。逆にRecord型を指定したり、「*」で指定することはできません。
クエリ実行時に「プリミティブな型を指定しなさい」というようなエラーが英語ででます。

プレビュー

「Preview」ボタンを押すと、テーブル内のレコードがいくつか表示されます。

クエリを書く

右上のエリアにクエリを記述します。
難しいことはないですが、知っておくと便利なことをいくつかだけ

SELECT節

まず、先述のように、SELECT節に「*」が使えません。
また、検索結果が膨大になる時は、実行前に警告が出ます。クラウド死しないよう気をつけましょう。

FROM節

テーブル名にハイフンが含まれる場合、[](角カッコ)で囲みます。
テーブル名はバケット名やプロジェクト名を含んでおり、ハイフンが入ってると思うので、角カッコ必須と思っていいでしょう。

テーブルが日付ごとに分かれていますので、複数の日時から検索したい時は、FROM節に以下のように記述します

  TABLE_DATE_RANGE([backet-name:project_name.app_events_], TIMESTAMP('2017-03-29'), TIMESTAMP('2017-04-18'))

こうすると、
backet-name:project_name.app_events_20170318 から
backet-name:project_name.app_events_20170418 までのテーブルから検索してくれます。
くれぐれもクラウド死注意。

WHERE節

たいていのことはできます(大雑把)。
念のため、RealtimeDatabaseはNoSQLなのであんまり大したWHERE指定ができませんが、BigQueryはそんなことないのでご安心を

とにかくLIMIT句は必ずつけておくのがいいんじゃないかな。

あとはドキュメントにたくさん日本語で書いてあります。
https://cloud.google.com/bigquery/query-reference#from

その他

user_dim.user_idは、アプリからAnalyticsを投げる前に指定したものです。

    [FIRAnalytics setUserID:userId];

このuserIdは、Firebase Authenticationで発行されたIDと同じものを指定しておくのがマストでしょう。
https://firebase.google.com/docs/reference/android/com/google/firebase/analytics/FirebaseAnalytics.html#setUserId(java.lang.String)

その他参考
http://qiita.com/taji-taji/items/760e242828dd58238dac
http://tiro105.hateblo.jp/entry/2016/12/23/234113

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした