Google Analytics

Treasure DataのGoogle Analytics Authenticationを利用する

こんにちは、開発Gエンジニアの渡邉です。

Google Analyticsのデータ解析をお手軽に、もしくはアドホック的に行う場合は、標準のコンソールか、Data Portalが利用しやすくよく使っていますが、複雑なデータ処理ができないのがもどかしかったりします。

例えば商品ページの詳細説明ボタンのクリック率を求めるために

sum(特定イベントのuniqueEvents)/sum(商品ページのuniquePageviews)

のようなメトリックをその場で作成して表示するようなことができません。
DBから集計を行うような仕組みが欲しいところです。GA→DBのデータ取得は

– Tableau, PowerBIなどで直接接続
– Google Analytics APIをシステムに組み込み利用する
– Google SheetのGAプラグインを利用
– BigQueryエクスポート

等々ありますが、ボスにTreasure Dataからgoogle analyticsデータの取り込みができるらしいことを教えてもらいました。弊社トライステージでは、Treasure Data(以降TDと記述します)をデータハブ(EAI)にしていることが多いので、TDからgoogle analyticsデータの取り込みを実装してみます。

これなら後続の処理で変換をかけながらタブロー等にデータを送信、細やかなレポーティングができそうです。TDの追加費用もありませんし、設定もそれほど難しくなさそうです。

Treasure Data Google Analyticsカタログの導入ガイド
Google Analytics Import Integration
TD公式の導入ガイドで、カタログ接続用のGCPサービスアカウントの作成、TDコンソールでの接続設定、CLIでの接続設定が解説されています。今回は認証にはサービスアカウントを利用し、TDのコンソールでの設定を行ってみます。また、管理サイト数が多いので、CLIでの設定を検討していきます。

Google Analytics APIの設定を行う

Treasure Data接続の前にGoogle Analyticsへの接続のためのサービスアカウントを作成しておきます。このサービスアカウントと、作成した秘密鍵を用いてTreasure Dataからの接続を行うことになります。

実際のところ、GAデータをDB利用で解析しているようなチームであれば、とっくにAPI設定が済んでいるケースが多いように思います。TDの設定部分だけご覧になる場合はこちらまで読み飛ばしていただきたいです。

Google Cloud Pratformコンソール上の設定

https://console.developers.google.com/
GCPコンソールから
プロジェクト作成
サービスアカウント作成
サービスアカウントに秘密鍵を追加
の順に作業を行います。

プロジェクト作成

プロジェクトを選択 → 新しいプロジェクト を選択



プロジェクト名を決定 → 作成 で新規プロジェクトの作成


サービスアカウント作成

左上のハンバーガーメニューから IAMと管理 → サービスアカウントの順に選択


上部のサービスアカウントを作成 を選択



サービスアカウント名、サービスアカウントIDを決定、完了を選択
***@***.iam.gserviceaccount.comのアドレスは後で利用します。


サービスアカウントに秘密鍵を追加

サービスアカウント一覧画面に作成したサービスアカウントが
表示されるのでアカウントのオプションを選択
新しい鍵を作成 → JSON → 作成 を選択
秘密鍵が自動でダウンロードされます。



Google Analytics APIを有効化する

https://console.developers.google.com/
GCPから
Google Analytics Reporting API
Google Analytics API
を有効化します。



Google Analytics側で設定を行う

意外と忘れがちな作業です。Google Analyticsのビューに先ほど作成したサービスアカウント「***@***.iam.gserviceaccount.com」を閲覧権限で追加します。

GA画面右下の歯車 → 右上の「+」 → メールアドレス入力 → 追加 の順に選択


取得対象データのビューIDをメモ

Google Analytics > 左下の歯車 > ビュー > ビューの設定の順にたどれば見つかります。
Treasure Dataで使いますので控えておきます。

Google Analyticsカタログで接続を作成

TDのカタログ一覧からGoogle Analytics カタログを選択

設定画面はある程度直感的に操作できます。大まかに、Catalog作成、Authentication作成、Sources作成の順に進行します。

Treasure Dataコンソール > Integration Hub(一番上のアイコン) > Catalog > Google Analytics の順に選択します。

TDにGAのロゴが出ているのを見るだけでテンションが上がってきます…!

秘密鍵を指定して認証を作成

カタログを選択し、New Authenticationの画面が表示されたらJson Keyを選択、作成済みのサービスアカウントの秘密鍵を貼り付けます。

View IDにも取得済みのビューIDを入力します。まだ取得していない方は、Google Analytics > 左下の歯車 > ビュー > ビューの設定の順にたどれば見つかります。設定できたらContinueを選択します。

作成したAuthenticationからテーブルを作成

Authenticationが作成できました。複数サイトを持っている場合1ビュー、1Auth作らないといけないのでめんどくさいですね。ここからNew Sourceでデータソースを作成します。

作成した認証を利用してソースを作成する

Integration Hub > Authentication > 作成した認証の順にたどります。

コネクション名を入力したらAddボタンでディメンション、メトリクスを指定します。入力支援などが無く、GA触り慣れていない方はかなり戸惑うと思いますが、クエリ名を探すのはクエリエクスプローラを使うとよいかと思います。
https://ga-dev-tools.appspot.com/query-explorer/

TDのSourceの設定画面で指定できるディメンション数はGoogle Analytics API V4の仕様と同様に9ディメンションまでとなります。

Time Seriesで1ディメンション消費されてしまうので、設定画面のDIMENSIONSブロックで指定できるディメンション数は8件までとなります。

ga:dateHourMinutesなどの分別情報を取得したい場合などはTimeSeries内で指定することはできません。1ディメンション消費してしまうので少しもったいないです。

また、接続設定の完了前にQuery Exploreでサンプリング発生の閾値をつかんでおくことをお勧めします。スケジュール設定が日次であっても、初期データの取得時にかなり高い確率でサンプリングが発生します。



場合によっては初期データの作成を、サンプリングが発生しない期間ごとに区切って小分けで実行する必要が出てきます。Google Analyticsのサンプリングの概要についてはデータのサンプリングについて をご参照ください


ディメンション・メトリクス設定からデータ出力の設定を行います。DB名、テーブル名、洗い替え設定(追加、全件洗い替え、新規データのみ洗い替え)、タイムゾーン、繰り返し実行設定などを行います。

Save & Run Nowを押下し、テーブルが作成されました。簡単に接続できてありがたいです。分析するサイトによってはGA4+BigQuery Exportへの移行に時間がかかってしまいそうだったり、そもそも権限的にGA4への移行ができないケースなどもありますので、こちらを積極的に利用していきたいです。

CLIを利用してソースを作成

管理サイトや集計ルールが増えるたびにウェブコンソールから設定を追加していると、クリック箇所が多すぎて人差し指に大変な負荷がかかります。CLIで簡単に接続を追加できるようにしておきます。

yml作成

作成済みのサービスアカウントの秘密鍵を指定してYAMLファイルを作成します。

in:
    type: 'google_analytics'
    auth_method: 'service_account'
    json_key_content: |
      {
        ***
      }
    view_id: 0000000
    time_series: 'ga:dateHour'
    start_date: "2021-01-01"
    end_date: "2021-01-31"
    incremental: true
    dimensinos:
      - "ga:browser"
    metrics:
      - "ga:pageviews"
out:
  type: td
  apikey: *************
  endpoint: api.treasuredata.com
  default_timezone: Asia/Tokyo
  database: test_database
  table: test_table
  mode: replace

YAMLファイルのプレビュー

td connector:preview treasure_data_load_test.yml
+---------------------------+----------------+----------------+
| date_hour:timestamp       | pageviews:long | view_id:string |
+---------------------------+----------------+----------------+
| "2021-03-27 08:00:00 UTC" | 1             | "000000000"    |
| "2021-03-27 09:00:00 UTC" | 1              | "000000000"    |
| "2021-03-27 12:00:00 UTC" | 1             | "000000000"    |
| "2021-03-27 13:00:00 UTC" | 1             | "000000000"    |
| "2021-03-27 14:00:00 UTC" | 1              | "000000000"    |
| "2021-03-27 15:00:00 UTC" | 1              | "000000000"    |
| "2021-03-30 00:00:00 UTC" | 1              | "000000000"    |
| "2021-03-30 01:00:00 UTC" | 1             | "000000000"    |
| "2021-03-30 02:00:00 UTC" | 1              | "000000000"    |
| "2021-03-30 03:00:00 UTC" | 1              | "000000000"    |
+---------------------------+----------------+----------------+
10 rows in set
Update ga_td_load.yml and use 'td connector:preview ga_td_load.yml' to preview again.
Use 'td connector:issue ga_td_load.yml' to run Server-side bulk load.

td connector:previewコマンドにてプレビューを行います。
connectorオプションについては以下にドキュメントがあります。
https://docs.treasuredata.com/display/public/PD/Connector+Commands

コネクタを発行

td connector:issue test_table.yml --database test_database --table test_table --time-column date_hour --auto-create-table

connector:issueオプションでテーブルの作成と初期データの投入を行います。

接続を作成してスケジューリングを行う

td connector:create test_connector "00 01 * * *" test_database test_table treasure_data_load_test.yml --timezone 'Asia/Tokyo' --time-column date_hour

connector:createで接続が作成されます。あ…こりゃ楽だ。
右端の引両紋みたいなアイコンからジョブの進行状況を確認できます。

Authentication、Sourceが自動的に生成されますが、コマンド内でAuthentication、Source名を指定することはできません。(2021/03時点)
google_analytics_日付でSourceが作成されていくので複数サイト管理時に少し困ります。これ何とかしてほしいです!怒ってはいません。

これで、Treasure DataにGoogle Analyticsデータを抽出する環境が作成できました。データ取得プログラムを書かなくていいので楽ですね!

1か月ほど2サイトのレポーティングを自動で行ってみましたが特に問題もなく動いてくれています。あとはデータサンプリング発生への配慮と、Yamlでのサイト管理をルールをしっかり決めてやっていきたいところです。

出典、リンクなど 本投稿は2021.05.01時点の情報をもとに執筆しています

ABOUT ME
Watanabe
Watanabe
BI構築, webアクセス解析などを担当することが多いです。 AWS, GCP, Tableau, Google Analytics, Yahoo Ads 登山、スノボが好き。