BigQueryとデータポータルでゲームデータを可視化する

グレンジでは，アプリケーションのログデータを[BigQuery][bigquery]に保存し，[データポータル][dataportal]を利用して可視化しています．
データポータルは，さまざまなデータを視覚化，分析することができるツールで無料で利用することができます．
この記事では，その中で得られたTipsを様々なケースにそって解説していきます．

データポータルの使い方に関しては，[基本的な使い方][datastudio-basic-using]を参照してください．

## データの連携

データポータルでは様々なコネクタと連携することができます．
コネクタには，`BigQuery`や`Cloud Spanner`，`Google Sheets`だけでなく，外部パートナーのデータをコネクタとして利用することができます．
接続できるデータの種類は[Connect to Data][datastudio-data]のページで確認することができます．

グレンジでは，主に`BigQuery`に出力されいているアプリケーションのデータを視覚化し分析しています．

## BigQueryのScheduleの活用

BigQueryは，非常に高速にSQLを処理してくれますが，DataPortalに多くのグラフを追加しているとどうしても表示速度が落ちてしまいます．
例えば，1つのダッシュボードに1日目，2日目，・・・7日目までのそれぞれのユーザー数をiOS，Android，その合計の数を出しているダッシュボードがあると，1つのダッシュボード内で7（日）✕3種類（iOS，Android，合計）のSQLが流れることになります．

また，ユーザーのアクセスログなどは`BigQuery`内では，`AccessLog_20201221`などのように日付で分割しているので，7つのテーブルから集計することになります．

こういった大きなログをもつテーブルを日付をまたいで集計すると時間もコストもかかってしまうので，BiqQueryの[クエリのスケジューリング][bigquery-scheduling-queries]を利用して1つのテーブルにデイリーで集計し，集計テーブルを参照するようにしています．

## ゲームデータを連結する

ユーザーのデータとゲームデータ（アイテム情報やランク情報など）を紐付けてデータを出したいことがあります．
ゲームデータは，IDが数字であることが多く，その数字だけを見ても何のアイテムかが一見するとわかりにくいのでアイテム名（やくそうや鉄の剣など）やランク（AランクやSランクなど）を具体的な名称でグラフに表記しています．

グレンジでは，こういったデータをGoogleDrive上に`csv`形式で保存しています．

### BigQuery上で連結する

そこで利用しているのは，[Google ドライブデータのクエリ][bigquery-external-data-drive]です．
この機能を利用することで，ゲームデータをBigQueryからクエリできるようにし，BigQuery上で連結させたデータを[ビュー][bigquery-view]の機能を利用し作成したビューを参照させることでデータポータルから利用しています．

他にもビューを利用した方法は，イベントデータの集計などでも利用しています．
各イベントに参加したユーザーの進捗度や使ったアイテム数などをイベントごとにサマリしておき，イベントIDごとにsuffixをつけたテーブルに保存しておき，データポータルから特定のテーブルを取得するviewなどを作成して取得しています．

例えば，`UserMisson_20201221`のようなユーザーのミッション進捗が日付ごとにシャーディングされたテーブルがあり，それを`UserMissionSummary_1`（1はイベント名）のようにイベントIDを集計していたとします．

このとき，それぞれのテーブルは以下のような形になっています．

- UserMisson_20201221

| userId | missionId | datetime |
|---|---|---|
| 1 | 10001 | 2020-12-21 11:11:11 |
| 2 | 10001 | 2020-12-21 12:34:56 |
| 1 | 10002 | 2020-12-21 13:45:00 |

- UserMissionSummary_1

| eventId | missionId | userCount |
|---|---|---|
| 1 | 10001 | 2 |
| 1 | 10002 | 1 |

このような`UserMissionSummary`は，イベントごとに作成されている場合，BigQuery上で以下のようなビューを作成しています．

```
SELECT * FROM `UserMissionSummary_*`
```

このSQLをビューとして保存しデータポータルから参照しています．

こうすることで，各イベントのデータを一括で取得し，前のイベントとの比較などを行えるようにしています．

### データポータル上で連結する

データポータルにもデータを連結させる機能があります．
[データの統合][datastudio-blending]を利用することによって，複数のデータをデータポータル上で統合させることができます．

ただし，この機能では１つの結合方法でしか複数のテーブルを結合することができないので注意が必要です．
A，B，Cというテーブルをx,yというキーで結合することができますが，A,Bというテーブルをx,yキーで，Cというテーブルはxキーのみで結合するなどはできません．

## データポータルでBigQueryのカスタムクエリを利用する

データポータルでは，データソースとしてBigQueryを利用するときに[カスタムクエリ][datastudio-bigquery]を作成することができます．
この機能は，BigQueryのテーブルやビューではなく，カスタムクエリを作成し，その結果をデータポータル上で利用できる機能です．
非常に柔軟にSQLを作成することができ，日付パラメータなどを扱える反面，カスタムクエリ作成者以外がカスタムクエリを変更できないのがデメリットです．
チームでデータポータルを作成している際に，特定のグラフだけ特定のカスタムクエリ作成者だけしか扱えないと変更したり内容を確認したりすることができないと不便です．
なのでグレンジでは，この機能は利用せずに，前に説明した「BigQuery上で連結」または，「データポータル上で連結」などを利用して対応しています．

## さいごに

BigQueryとデータポータルを利用してゲーム内のデータを可視化する際のTipsを紹介しました．
グレンジでは，チームのメンバーがいつでもこのデータポータルにアクセスしゲームの状態を把握できるようにしています．
データを活用しゲーム内でのユーザーの動向を把握することで，イベントのアップデートや新規されるキャラクターやカードを作成する際の参考に利用しています．

是非みなさんもデータポータルを利用してよりよいゲーム開発に活用してみてください！

[//]:#(参考Start)
## 参考

- [データポータル][dataportal]
  - [基本的な使い方][datastudio-basic-using]
  - [Coonect to Data][datastudio-data]
  - [データの統合について][datastudio-blending]
  - [Google BigQuery に接続する][datastudio-bigquery]
- [BigQuery][bigquery]
  - [クエリのスケジューリング][bigquery-scheduling-queries]
  - [Google ドライブデータのクエリ][bigquery-external-data-drive]
  - [ビューを作成する][bigquery-view]

[//]:#(参考End)

[//]:#(RefUrlStart)

[dataportal]: https://marketingplatform.google.com/intl/ja/about/data-studio/
[datastudio-data]: https://datastudio.google.com/data
[datastudio-basic-using]: https://support.google.com/datastudio/answer/6378181?hl=ja&ref_topic=6267740
[datastudio-blending]: https://support.google.com/datastudio/answer/9061420?hl=ja
[datastudio-bigquery]: https://support.google.com/datastudio/answer/6370296?hl=ja

[bigquery]: https://cloud.google.com/bigquery?hl=JA
[bigquery-scheduling-queries]: https://support.google.com/datastudio/answer/7178497?hl=ja
[bigquery-external-data-drive]: https://cloud.google.com/bigquery/external-data-drive?hl=ja
[bigquery-view]: https://cloud.google.com/bigquery/docs/views

[//]:#(RefUrlEnd)