Google Analytics（GA）のデータをembulkを使ってBigQueryに転送させる方法

# はじめに
弊社ではユーザーの一部アクションログを GoogleTagManager（GTM）と組み合わせて GoogleAnalytics（GA）にイベント情報を保存し分析をしています.

今回はGTMに関しては触れませんが, 例としてGA上に保存されたイベント情報を BigQuery に転送してみます。


イベント情報に限らず PageView など様々なGA上のデータを取得して転送することが出来るため, 発想次第では面白いデータ分析ができそうです.

## GAのイベント情報とは
弊社では, 以下のようなイメージでユーザーの行動をイベント計測しています.

- イベントカテゴリ：施策ごとのユニークな管理番号（xxx_profile_search）
- イベントアクション：イベント種別（click, load)
- イベントラベル： イベント分類(ユーザーID)

<img width="653" alt="スクリーンショット 2018-04-14 17.38.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/38342/fc4d3a71-eb8e-cf97-69f7-98a4b8de3c23.png">

GAのイベント トラッキングについては, 以下のページを参考ください。

- [イベント トラッキング](https://developers.google.com/analytics/devguides/collection/analyticsjs/events?hl=ja)
- [ページ内でのユーザー行動が手に取るようにわかる！ GAでイベントトラッキングを設定する方法](https://webtan.impress.co.jp/e/2017/09/14/26783)

# BigQueryへイベントデータを転送する

みんな大好き [embulk](http://www.embulk.org/docs/) を使ってアナリティクス上のデータをインプットソースとしてBigQueryへアウトプットします.

## サービスアカウントを発行する
まず, 認証のためのアカウントを発行します。
自身のプロジェクトを選択して[サービスアカウント](https://console.cloud.google.com/projectselector/iam-admin/serviceaccounts) を発行します.

<img width="510" alt="スクリーンショット 2018-04-14 18.37.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/38342/a82104fb-8862-d3f7-838f-5232ba0e9dbe.png">

## APIを有効にする
該当するAPIを有効にします.

- [BigQuery API](https://console.developers.google.com/apis/api/bigquery/overview) 
- [Analytics API](https://console.developers.google.com/apis/api/analytics/)
- [Analytics Reporting API V4](https://console.developers.google.com/apis/api/analyticsreporting.googleapis.com/) 

<img width="642" alt="スクリーンショット 2018-04-14 19.30.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/38342/806ddf2b-7399-bb70-57b3-44ca76c7a202.png">

## GAにサービスアカウントを登録する

[Google Analyticsの管理画面](https://analytics.google.com/analytics/web/#management/Settings/
) 対象のビューのユーザーに, さきほど作成したサービスアカウントを **「表示と分析の」** 権限で追加してください。

<img width="980" alt="スクリーンショット 2018-04-14 18.45.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/38342/594b8c55-a442-89c7-8240-14121a1e1d32.png">

## Gemのインストール

Google Analyticsからデータをインプットし, BigQueryへデータをアウトプットするために以下のGemを使います.

- [embulk-input-google_analytics](https://github.com/treasure-data/embulk-input-google_analytics)
- [embulk-output-bigquery](https://github.com/embulk/embulk-output-bigquery
)

```
embulk gem install embulk-input-google_analytics
embulk gem install embulk-output-bigquery
```

## 設定ファイルの作成

```ga-to-bigquery.yml
in:
  type: google_analytics
  json_key_content: |
    {
      "type": "service_account",
      "project_id": "....",
      "private_key_id": "....",
      "private_key": "-----BEGIN PRIVATE KEY-----\n..........................\n-----END PRIVATE KEY-----\n",
      "client_email": ".....",
      "client_id": ".........",
      "auth_uri": "https://accounts.google.com/o/oauth2/auth",
      "token_uri": "https://accounts.google.com/o/oauth2/token",
      "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
      "client_x509_cert_url": ".........."
    }

  view_id: 123456789 # your google_analytics view_id
  time_series: "ga:date"

  # https://developers.google.com/analytics/devguides/reporting/core/dimsmets
  dimensions:
    - "ga:eventCategory"
    - "ga:eventAction"
    - "ga:eventLabel"
  metrics:
    - "ga:totalEvents"

  start_date: "2018-04-10"
  end_date: "2018-04-11"

out:
  type: bigquery
  mode: replace
  auth_method: json_key
  json_keyfile: example/your-project.json
  auto_create_dataset: true
  auto_create_table: true
  dataset: google_analytics
  table: content_event
  compression: GZIP
  source_format: CSV
  default_timezone: "Asia/Tokyo"
```

## 実行してみる

```
embulk run ga-to-bigquery.yml
```
<img width="807" alt="スクリーンショット 2018-04-14 19.21.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/38342/84b1f9c2-53a8-53a4-f371-de019a6305c4.png">

以上で, BigQuery上にアナリティクスのデータを転送することができました.

例えば, BigQuery上にサービスDBのユーザーテーブルなど, 各種マスタ・トランザクションテーブルがあると結合してもう少し深ぼった分析が可能になりそうですね.

# 補足
今回はBigQueryに直接データを転送していますが一度GCSにデータをエクスポートし, GCSを経由させてBigQueryに転送した方がパフォーマンスも良く安定します.

# 参考リンク
- [embulk-input-google_analytics](https://github.com/treasure-data/embulk-input-google_analytics)
- [Embulkを使ってGoogle アナリティクスのデータをBigQueryに転送する方法](https://www.principle-c.com/column/engineer/embulk-bigquery/)