『剣と魔法のログレス いにしえの女神』でのBigQueryの利用


Web開発チーム エンジニアの富田です。
「剣と魔法のログレス いにしえの女神」(以下ログレス)の管理ツールを開発しています。

先日、社内勉強会でBigQueryについてお話する機会があったので、その内容を元にしながら、ログレスでのBigQueryの利用や「管理ツール」開発について紹介したいと思います。

BigQueryの利用について

ログレスでは、ゲームサーバーから出力されるログをBigQueryにアップロードしています。
出力されるログは、膨大且つ様々な種類がありますので、その中から目的のデータを探し出すには、BigQueryの検索性能は非常に有用です。

AimingでのBigQueryの利用については、下記の記事に記載していますので、ご興味のある方はご覧頂ければと思います。
AimingでのGoogle Cloud Platformの利用事例について紹介しました

また、ログだけでは無くデータベース内のデータも一部、BigQueryにアップロードしています。
ログ内にはアイテム名やクエスト名のようなデータではなく各IDしか入っていませんので、データベース内の情報とJOINすることで、それらを取得できるようにしています。

他のメリットとしては、BigQueryにアップロードしておけば、本番環境の状態に関わりなく、各種集計処理を行うための負荷の高いクエリを投げることができます。

「管理ツール」でのBigQueryの利用について

ログレスの「管理ツール」では、お客様サポート用の機能、売上等のKPI、プッシュ通知などの運用ツールなどを提供しています。

「管理ツール」の機能例

これらの機能の一部で、BigQuery内のデータを利用しています。

例えば、アイテムデータ喪失のお問い合わせ用にアイテムの操作履歴の検索機能や、プランニングの参考のためにクエストの達成状況を一覧する等の機能があります。

これらの機能は、運営・制作スタッフの要望や新コンテンツの追加等によって、現在も次々と追加されています。

また、他の使用例としては、先日公開した ログレス国勢調査 の各項目の集計に利用しました。
掲載している各集計値は、全てBigQueryのデータを元にしています。

データ解析ツールとその利用

Aimingには各ゲームのKPIを横断的に閲覧できる解析ツールが有り、このツールではBigQuery内のデータを使用しています。

このツールに集計クエリを登録すると、簡単に時系列(時間単位/日次/週次/月次)でグラフ化することができます。

例えば、イベント用のクエストの達成率を一覧したり、ガチャ施策が想定通りの効果が得られなかった場合に、その要因となる指標を集計してグラフ化し、お客様によりご満足いただけるゲーム体験を提供するための改善に役立てるなどの利用用途があります。

Web開発チームでは、日頃より、この解析ツールについての社内勉強会・ワークショップを行い、エンジニア以外の利用も推進していく活動も行っています。

また、各種イベント施策の効果検証をデータ面から補強できるように、グラフ化やデータ抽出を行って、プランニングに役立てて頂いてます。


MySQLからBigQueryへのデータロード


はじめまして、エンジニアの古堀です。

Aimingではログの分析ツールとしてGoogleのBigQueryを利用しています。
ゲームプレイのログを集計、分析して機能開発、改善の指針として活用しています。
実際に運用に乗せてみるとログだけでは情報が足りず、ユーザー情報やマスターデータなども必要であると気付きました。そこでMySQLのデータをBigQueryに反映させる試みに取り組んだので紹介したいと思います。

BigQueryの特長と言えば以下の2点ですが、実際に使用してみるとGoogleアカウントでの認証や権限設定なども便利だと感じますね。

  • クエリーの処理速度が速い(数十億件のテーブルでも数十秒で結果が返ってくる)
  • 費用が安い

Embulkの採用

MySQLのデータをBigQueryに反映するツールとして Embulk を利用しています。
以下の理由からEmbulkを採用しましたが、最新技術を使ってみて活用事例を増やしてみたいという個人的欲求もありました。

  • Java実装なのでどの環境でも動作する
  • 設定ファイルを追加するだけで動かせる
  • 社内の他のプロジェクトで動作検証済だった
  • 新しいツールだが今後の機能拡張に期待ができそう

事前準備

1. Embulkのインストール
2. 対象テーブル毎にBigQueryのスキーマ定義を作成する
3. 対象テーブル毎にEmbulkの設定ファイルを作成する

処理時間の都合で全テーブルではなく、20テーブルほどに対象を絞っています。
2、3のステップは対象テーブルが増える毎に作業が発生するのが難点です。
あとは設定ファイル毎(テーブル毎)にEmbulkのプロセスを起動しなければならず、テーブル数が増えてくると面倒になってきます。
そこで設定ファイル作成、Embulkの起動を簡単にするためのツールを作成して設定の手間を軽減しています。

実行

実際に動かしてみるとすんなり処理が完了して感動しました!Embulkは導入から実行までの敷居が低くて良いですね。ただ、オーバーヘッドが大きく、テーブルサイズによらず1テーブルあたり処理時間が1分ほどかかりました。レコード件数が2000万件を超えるとIOトラブルが起きやすいですね。

困ったこと、ハマったこと

以下の問題に直面しましたが1はMySQLのテーブル定義からBigQueryのスキーマを作成するツール、2・3はMySQLからデータをロードするSQLの生成ツールを作成して解決しました。

1.スキーマ変換

MySQLのカラムの型定義とBigQueryの型定義が異なるので互換性のある型を指定する必要があります。

2.Boolean型の変換

tinyint(1) で定義されたカラムの値がEmbulkで truefalse とし扱われてるのでBigQueryの integer 型のカラムにインサートできません。
対応としては signed に型キャストするSQLを書くか、BigQueryのカラムを boolean にする必要があります。

3.タイムゾーン

BigQueryのタイムゾーンはUTC固定なので、JSTなどの他のタイムゾーンのDBのデータは時刻補正が必要です。