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

## 概要
Elasticsearch（エラスティックサーチ）は索引型（インデックス型）の全文検索エンジンの一つです。索引型の全文検索エンジンの身近な例として、Google検索では検索条件となる特定の文字列をインデックスとして利用してその文字列を含むウェブページを検索し、Githubのソースコード検索では特定のコードをインデックスとして検索に利用しています。
ElasticsearchはGoogle検索のように特定の文字列をインデックスとして利用して検索しますが、Google検索がウェブページを検索するのに対してElasticsearchはドキュメントから検索を行います。イメージとしては図書館の本の検索機能が近いのではないでしょうか。そしてElasticsearchの活用により、図書館の本や新聞記事のようなデータだけではなく、企業情報やログファイルとして出力されたアクセスログやセキュリティログといった幅広いデータを高速で検索することが可能となります。
Elasticsearchには同じ提供元が開発したKibanaというツールがあり、こちらを用いてデータの可視化を行うことが可能です。ですがやはり使い慣れたBIツールで可視化を行いたい、他のデータと合わせて一つのDWH（データウェアハウス）へ統合してまとめて管理したいなどの場合にはETLツールを用いたデータ統合を行う必要があります。
そこで今回は、[trocco®](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=elasticsearch_to_bigquery_tableau)（トロッコ）という分析基盤向けデータ統合サービスを使い、ElasticsearchのデータをGoogle BigQueryへ統合し、KibanaではなくTableauを用いてデータの可視化をやってみます。
なお今回データの転送手段として使用する[trocco®](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=elasticsearch_to_bigquery_tableau)は、Elasticsearchの他にも、様々な広告・CRM・DBなどのデータソースに対応しています。  
[trocco®の使い方まとめ（CRM・広告・データベース他）](https://qiita.com/hiro_koba_jp/items/2b2caa040804e402bda7)
![Troccoアイコン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/26e31b47-9a4e-88f7-dab6-9bc1c24eced5.png)
## ゴール
今回はElasticsearchから出力されたある検索結果をGoogle BigQueryへ転送し、そのデータをベースにこのように可視化することを目標にします。
![スクリーンショット 2022-03-07 14.15.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/27716e82-622b-bcf5-af36-88f334f148e3.png)
## こんな人におすすめ
* ElasticsearchのデータをKibana以外のツールで可視化、分析したい
* Elasticsearchのデータを他のDWHへ統合して活用したい
* サイトのアクセスログや、セキュリティログといったデータの分析を行いたい
## 1. trocco®での設定
### 1-0. 事前準備
データの転送には[trocco®](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=elasticsearch_to_bigquery_tableau)のアカウントが必要です。
[trocco®](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=elasticsearch_to_bigquery_tableau)は現在無料のトライアルを実施しています。事前にトライアルの申し込みをし、アカウントを作成しておきましょう。
[https://trocco.io/lp/index.html](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=elasticsearch_to_bigquery_tableau)  
（トライアル申込の際にこちらの記事を見たという旨を記載していただければその後のご案内がスムーズに行えます）  
またデータ元となるElasticsearchのデータや、データの転送先となるGoogle BigQueryを操作するGoogleアカウント、データの可視化を行うためのTableauのアカウントなども前もってご用意ください。
### 1-1. 転送元・転送先の決定
[trocco®](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=elasticsearch_to_bigquery_tableau)にアクセスして、ダッシュボードから「転送設定を作成」ボタンを押します。
![スクリーンショット 2022-03-02 13.25.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/2c0af2fa-2d2f-7fc4-9eed-ea0b869bf6e5.png)
転送元と転送先となるツールを選択する画面になります。
![スクリーンショット 2022-03-02 13.29.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/8ff1b868-0783-ba37-23f4-4a0cf4fabd86.png)
[trocco®](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=elasticsearch_to_bigquery_tableau)は多くのサービスをサポートしています。今回は転送元に「Elasticsearch」を選択し、転送先には「Google BigQuery」を選択し、「この内容で作成」ボタンを押します。
![スクリーンショット 2022-03-07 13.40.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/ed9e97f9-b854-0b8f-fbf0-44af8324483f.png)
### 2-1. Elasticsearchからの転送設定
まずは右上の「接続情報を追加」ボタンを押します。
![スクリーンショット 2022-03-07 13.42.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/945b651b-5bcf-f9aa-6479-e1aa436b1745.png)
別のタブでElasticsearchへの接続情報を入力する画面が開きますので、ホスト名やポート、Basic認証を行う際のユーザーIDとパスワードを入力し、接続情報を保存します。
![スクリーンショット 2022-03-07 13.43.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/208c938b-c2e3-3c5b-a42a-56c9f9904a50.png)
転送設定画面に戻り、「接続情報を読み込む」ボタンを押すと右の▽マークから入力した接続情報を読み込めます。
※トップページの「接続情報」タブから事前に接続設定を済ませておくことも可能です。
![スクリーンショット 2022-03-07 13.45.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/03ed4ed3-7413-426d-67bf-64e6b8f83b49.png)
接続情報が設定できたら転送に必要な情報を入力していきます。検索するデータのindex名、type名を入力し、クエリを書き込みます。またデータのフィールド設定も行います。詳しくは[こちらのヘルプページ](https://documents.trocco.io/docs/data-source-elasticsearch?highlight=elastic)をご確認ください。
![スクリーンショット 2022-03-07 13.46.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/a107663c-23b6-0c50-5b30-c8ba6abaaa5c.png)
### 2-2. Google BigQueryへの転送設定
転送元のElasticsearchと同様に設定をしていきます。Google BigQueryについても「接続情報を追加」ボタンから別のタブで接続情報の設定画面を開き、Googleアカウントとの連携を行います。（事前に転送先となるデータセットとテーブルを作成しておいてください。）
※トップページの「接続情報」タブから事前に接続設定を済ませておくことも可能です。
![スクリーンショット 2022-03-07 13.47.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/056c5cd6-3bf4-6b13-a210-e4a6e6a1f536.png)
転送先とするデータセット名、テーブルなど必要な情報を入力します。入力が済んだらページ最後の「次のSTEPへ」ボタンを押します。
![スクリーンショット 2022-03-07 13.49.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/395e256a-2e32-5ac0-82dc-cb04992cac3e.png)
### 2-3. データのプレビュー・詳細設定
設定にしたがって転送のレビューが作成されます。
![スクリーンショット 2022-03-07 13.50.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/144d8ad5-3907-adc1-9fff-017f0abb9de7.png)
転送元からどのようにデータが取得されるのか確認できます。特に問題なく取得できていそうなのでプレビュー画面下部の「確認画面へ」ボタンを押します。
![スクリーンショット 2022-03-07 14.20.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/a428db0f-4bbf-d13c-ca4c-12df90a61058.png)
なおプレビュー画面下部の詳細設定ではデータのマスキング処理や転送するカラムの選択などデータの加工設定ができます。
![スクリーンショット 2022-03-07 13.52.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/88870819-e7cb-2eba-ec48-c705ddffd084.png)
### 2-4. 確認・適用
転送設定の内容が確認できます。過去に作成した転送設定の内容を編集した際にはこの画面でその差分がハイライト表示され、確認をすることが可能です。
今回は設定の新規作成なので、特に確認することはありません。右下の「保存して適用」ボタンを押します。
![スクリーンショット 2022-03-07 13.55.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/20177fb8-a2e2-f6f8-60eb-8cc789175250.png)
[trocco®](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=elasticsearch_to_bigquery_tableau)には転送設定の変更後も過去の設定を履歴として保存し、転送設定の変更によって転送が失敗するようになった際などは過去の設定を復元する機能があります。
チームで[trocco®](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=elasticsearch_to_bigquery_tableau)を共有して使用する場合などは転送設定の変更についてこの画面で簡単なメモを残しておきましょう。
![スクリーンショット 2022-03-07 13.56.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/06ddb76a-8c23-2cf3-7b0e-f4931ff77026.png)
### 2-5. スケジュール・通知設定
転送設定の詳細設定画面に移動します。まず「転送設定概要」タブでは設定の内容が大まかに確認できます。  
![スクリーンショット 2022-03-07 13.58.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/f336622a-6cdb-dc50-27af-097a3fcdaf9b.png)
[trocco®](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=elasticsearch_to_bigquery_tableau)にはデータの転送を自動で行う「スケジュール・トリガー機能」があります。「スケジュール・トリガー設定」タブを開いて定期的な転送スケジュールの設定を行いましょう。「スケジュールを追加」ボタンを押すと、設定のモーダルが出てきます。希望に応じて実行スケジュールを設定し、転送の自動化を行います。（今回は毎日０時に転送を行うよう設定しました。）
![スクリーンショット 2022-03-07 13.59.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/8ca93f0d-ffea-5d58-6313-d32de0eb0b6e.png)
![スクリーンショット 2022-03-07 14.01.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/2d969dca-9fd9-e5f0-e20d-635568cfb3ea.png)
### 2-7. データ転送ジョブの実行
設定は以上で終わりです。データの転送は以後自動的に行われますが、右上の「実行」ボタンから手動で転送を実行します。
![スクリーンショット 2022-03-07 14.02.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/27ddeab0-6d0e-bdc6-cab3-bb1a892ac0ef.png)
転送の実行に際し、その目的などをメモとして残しておくことができます。特に書くことがなければ再び「実行」ボタンを押します。
![スクリーンショット 2022-03-07 14.03.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/2f22bf9d-d944-8687-a915-5b4aef7f9585.png)
ジョブが実行されます。
![スクリーンショット 2022-03-07 14.04.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/7ae33b54-a1fc-bbc4-93f5-03bea2e5e5c0.png)
しばらく待つとジョブが終了します。
![スクリーンショット 2022-03-07 14.05.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/0e9187f0-31a6-382b-67a1-186c2b6d377f.png)
## 3. Google BigQueryの設定
転送ジョブが成功していればGoogle BigQueryのコンソール画面から特に操作することはありません。プレビュー画面からは[trocco®](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=elasticsearch_to_bigquery_tableau)の転送設定で選択したテーブルにデータがきちんと転送されていることが確認できます。
![BigQuery.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/5625bc1f-7bdc-b40b-1dbe-976d1f4500bd.png)
## 4. Tableauでの可視化
最後にTableuでのデータ可視化を行います。まずはトップ画面の「新規」
から新しいワークブックを作成しましょう。 
![スクリーンショット 2022-03-02 14.01.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/baa3d405-c49d-063b-9fe9-f85b44f71b82.png)
自動的にデータの接続先を選ぶ画面になるので、コネクタからGoogle BigQueryを選択します。（ここでもGoogleアカウントとの連携設定を行います。Google BigQueryを操作するアカウントを選択して連携を行います。）
![スクリーンショット 2022-03-02 14.01.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/886d8518-42ab-d7f6-d76f-b3951c9e8659.png)
画面左側でデータを転送したプロジェクト、データセットを選び、Tableau側で読み込んだテーブルをワークブックに追加します。
![スクリーンショット 2022-03-07 14.09.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/f67bc315-0154-3b67-f094-75f0ea97e696.png)
新しいシートに移動します。
画面の左側にはGoogle BigQueryから読み込まれたカラム名がフィールドとして表示されています。これらを行と列に配置してグラフを作成していきます。右上の「表示設定」には予め主要なグラフが用意されており、これらのグラフを選択することでも簡単にグラフを作成することが可能です。
![スクリーンショット 2022-03-07 14.14.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/732d9148-6acd-c69c-eb31-e046cad23768.png)
作成したグラフをダッシュボードに配置して完成です。
![スクリーンショット 2022-03-07 14.15.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/c9fbf868-c4e0-ad65-6957-34b323a105f6.png)
## まとめ
ElasticsearchのデータをGoogle BigQueryへ統合し、Tableauで可視化してみました。また[trocco®](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=elasticsearch_to_bigquery_tableau)で「スケジュール・トリガー機能」の設定を行ったため、以後はElasticsearchで集めたデータが自動的にGoogle BigQueryへ転送され、連携するTableauのダッシュボードも自動的に更新されていくという流れを作っています。
今回はごく簡単なサンプルデータを用いて転送を行いましたが、[trocco®](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=elasticsearch_to_bigquery_tableau)を利用することでElasticsearchの強みである高速検索によって集められた膨大なデータもごく小さなデータも自動でGoogle BigQueryに統合することができるほか、より専門的な知識が必要となるプログラミングを行うことなく画面上の設定のみでデータの転送が可能です。
実際に弊社サービスの[trocco®](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=elasticsearch_to_bigquery_tableau)においても、マーケティングKPI等のデータはこのような流れで収集・分析しています。
データ分析の際にはぜひご活用ください。
[https://trocco.io/lp/index.html](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=elasticsearch_to_bigquery_tableau)
実際にデータの統合を試してみたい場合は、[無料トライアル](https://trocco.io/inquiry_trial/new?utm_medium=social&utm_source=qiita&utm_campaign=elasticsearch_to_bigquery_tableau)を実施しているので、この機会にぜひ一度お試しください。（申込時に、この記事を見たという旨を記載していただければその後のご案内がスムーズ行えます。）
その他にも広告やデータベースなど、様々な分析データをETL・転送した事例をまとめました。
[trocco®の使い方まとめ（CRM・広告・データベース他）](https://qiita.com/hiro_koba_jp/items/2b2caa040804e402bda7)