ElasticsearchのデータをBigQueryに転送し、データポータルで可視化してみる

## 概要
運営しているサービスのユーザーの行動ログをElasticsearchに溜めており、サービス改善のためにデータ分析を行おうと考える方も多いと思います。そこで今回はElasticsearchのデータをBigQueryに自動転送し、データを可視化するまでを行ってみます。

その他にも広告やデータベースなど、様々な分析データをETL・転送した事例をまとめました。
[troccoの使い方まとめ（CRM・広告・データベース他）]
(https://qiita.com/hiro_koba_jp/items/2b2caa040804e402bda7)
<img width="1791" alt="qiita_20200827_1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/2bb26f37-2417-753f-2fb3-196173ffe07e.png">
## ゴール
↓こんなのを15分くらいで作り上げます（当然、作ったあとは自動で最新値が更新されるようにします）
<img width="1791" alt="qiita_20191210_1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61228/5dcb8951-01c6-e983-c401-2c6004ec013d.png">
## こんな人におすすめ
* ElasticsearchのデータをBigQueryにも保存しておきたい方
* Elasticsearchに保存したデータと他のデータを組み合わせて分析したい方
* 自前のコードを用いたデータ取り込みや、手作業によるデータ取得に疲れている方・・・

##1. DWHと同期する手段の選定<br>
###1-1. DWHの選定
まずはデータをどこに集約するか、DWH（データウェアハウス）を選定します。

* Google BigQuery
* Amazon Redshift
* MySQLやPostgreSQL

今回はBigQueryを利用することにします。

###1-2. ElasticsearchのデータをBigQueryに転送する3つの方法
BigQueryにデータを集約することが決まったので、次は転送するための手段を検討していきます。
　1. ElasticsearchとBigQueryの各APIを、プログラムを書いて連携する
　2. Embulkを利用し、自分で環境を構築する
　3. [trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=elasticsearch_to_bigquery)を利用し、画面上で設定する

1はAPIのキャッチアップ工数+プログラムを書く工数+環境構築工数が発生する他、エラー対応などの運用工数も継続的に発生します
2も1と同じくEmbulkはある程度の専門知識が必要になり、自前で環境構築・運用を行う手間が発生します。加えてエラーの内容が少し専門的であるため、エラーの解決に時間がかかる可能性があります。

そこで今回はEmbulkの課題も解決してくれて、プログラムを書かずに画面上の設定で作業が完結する、3の[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=elasticsearch_to_bigquery)というSaaSを利用します。

## 2. troccoでElasticsearch→BigQueryの転送自動化
### 2-0. 事前準備
[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=elasticsearch_to_bigquery)のアカウントおよびElasticsearchのホスト名が必要です。
[無料トライアル](https://trocco.io/inquiry_trial/new?utm_medium=social&utm_source=qiita&utm_campaign=elasticsearch_to_bigquery)もやっているみたいなので、事前に申し込み・登録しておいてください！
（申込時に、この記事を見た旨を記載して頂ければご案内がスムーズです）
### 2-1. 転送元・転送先を決定
[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=elasticsearch_to_bigquery)にアクセスし、ダッシュボードから転送設定を作成ボタンを押します。
<img width="1792" alt="qiita_20200827_2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/6c9654ca-a79c-60ac-0ebd-ebae9b9e5816.png">
転送元にElasticsearchを、転送先にBigQueryを選択肢、転送設定作成ボタンを押します。
<img width="1792" alt="qiita_20200827_3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/dfd54309-8af3-fc8b-c12a-e943962d2490.png">
すると、設定画面になるので、設定画面から必要な情報を入力していきます。
### 2-2. Elasticsearchとの連携設定
転送設定の名前とメモを適当に入力したら、「転送元の設定」内の「接続情報を追加」ボタンを押します。
<img width="1792" alt="qiita_20200827_3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/406d5939-fc0d-9506-bfc2-5ad9b47e7e30.png">
<img width="1792" alt="qiita_20200827_4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/23a61720-36f7-be69-d258-dc5c1917a0c1.png">
別タブで接続情報の新規作成画面が開きますので、Elasticsearchのホストを入力して、「保存」ボタンを押します。
<img width="1792" alt="qiita_20200827_5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/97f3a2a0-19e5-28dd-88ae-3469b6ffb946.png">
再度転送設定画面に戻り、「接続情報を読み込む」ボタンを押すと、作成した接続情報が選択できるかと思います。
<img width="1101" alt="qiita_20200827_6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/053b41a8-372a-0331-346a-bfc42069613a.png">
### 2-3. Elasticsearchからのデータ抽出設定
これでElasticsearchとの連携は完了です。次に、どのようなデータを取得するか設定していきましょう。
ここでは試しにElasticsearchの中に溜めておいたあるサイトのログを取得します。
データ検索のためにluceneクエリを記述する必要があります。
<img width="1101" alt="qiita_20200827_7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/a3b4e538-a14a-2c77-6ab7-4b737f861bef.png">
### 2-4. 転送先BigQueryの設定
転送元と同じ要領で設定していきます。
データセットとテーブルはお好きな名前を入力してください。自動生成オプションを有効にすれば、データセット・テーブルが自動作成されます。
また、カスタム変数を使うことにより、ジョブ実行時に指定の値に置き換えることができます。
BigQueryデータセットのロケーションを指定することができます。デフォルトはUSリージョンです。
<img width="988" alt="qiita_20200827_8.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/366ddfa8-b43f-6bf5-22af-4a97ac3ecd5d.png">
これで入力は完了です。「保存して自動データ設定・プレビューへ」をクリックし、確認作業に進みましょう。
### 2-5. データのプレビュー
転送元のデータがプレビューされます。ここではElasticsearchから取り込んだデータが表示されています。
問題ないので、このまま「スケジュール・通知設定」に進みます。
<img width="1792" alt="qiita_20200827_9.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/49dede3d-6b1d-9e4a-af9e-8f3edc75f483.png">
### 2-6. スケジュール・通知設定
以下のように実行スケジュールを設定することで、転送を自動化することが出来ます。
<img width="1792" alt="qiita_20200827_10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/d816931a-6db4-9604-23b0-eefabab1be9d.png">
### 2-7. データ転送ジョブの実行
設定は以上です。最後に、手動で転送ジョブを実行し、BigQueryにデータを送ってみましょう。
実行はジョブ詳細画面の「実行」ボタンを押すだけです。
<img width="1792" alt="qiita_20200827_11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/d5214718-4015-2b63-cb61-87acd1fd4ec4.png">
## 3. BigQueryの設定
特に設定することありません。データが溜まっているので、今すぐに分析・可視化を行うことが出来ます。
念の為データをプレビューして確認してみます。
<img width="1792" alt="qiita_20200827_12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/c05f8de0-a87a-5bca-7742-a17a2046ce93.png">
## 4. Googleデータポータル（旧データスタジオ）で可視化
BigQueryの画面から、「エクスポート > データポータル」を選択します。
<img width="240" alt="qiita_20200827_13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/eb566777-527e-55a4-5ca1-96bd87e0bd3d.png">
すると、以下のようなData Portalの画面に遷移します。
試しに、日ごとのサイトの閲覧数とサイト中でのクリック数を可視化してみましょう。
図の指示のとおりに変更してみてください。
<img width="1792" alt="qiita_20200827_14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/4851e7c9-fd2d-f31c-782c-de3dd0c3a71b.png">
すると、以下のようなグラフが出来上がります。
<img width="1792" alt="qiita_20200827_15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/de1f6bf7-c522-cb59-5a9c-510be978e29b.png">
この画面はデータポータルの「エクスプローラ」という機能になります。
<img width="267" alt="qiita_20200827_16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61228/03a167e2-d307-20af-a378-56712023708e.png">
データポータルのトップ画面から、「レポート」を作成し、上述の通りグラフ作成を行うと、サービス用ダッシュボードが出来上がります。
<img width="1791" alt="qiita_20200827_17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61228/b225ec66-18b6-dc70-2361-bcf566745a54.png">
## まとめ
いかがでしたでしょうか。[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=elasticsearch_to_bigquery)を使うと管理画面を触ることなく、簡単に広告レポートを取得し、DWH(BigQuery)に貯めることが出来ました。
また、BigQueryにデータを貯めると、データポータルというGoogleの無料ダッシュボードですぐに可視化することが出来ます。
実際に弊社サービスの[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=elasticsearch_to_bigquery)においても、マーケティングKPI等をこのような流れで収集・分析しています。

試してみたい場合は、[無料トライアル](https://trocco.io/inquiry_trial/new?utm_medium=social&utm_source=qiita&utm_campaign=elasticsearch_to_bigquery)を実施しているので、この機会にぜひ一度お試しください。
（申込時に、この記事を見た旨を記載して頂ければスムーズにご案内できます）

その他にも広告やデータベースなど、様々な分析データをETL・転送した事例をまとめました。
[troccoの使い方まとめ（CRM・広告・データベース他）]
(https://qiita.com/hiro_koba_jp/items/2b2caa040804e402bda7)