BoxのデータをSnowflakeに自動同期し、Lookerで可視化する


## 概要
Boxにアップロードされたデータを分析する際、更新されるたびにデータを転送して最新の状態に保つのには手間がかかります。
そこで今回は、[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=box_to_snowflake)という分析基盤向けデータ統合サービスを使い、Boxのデータ取得自動化＋DWH(データウェアハウス)への統合＋可視化までやってみようと思います。
今回、データの転送手段として採用した[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=box_to_snowflake)は、Boxの他にも、様々な広告・CRM・DBなどのデータソースにも対応しています。
[troccoの使い方まとめ（CRM・広告・データベース他）](https://qiita.com/hiro_koba_jp/items/2b2caa040804e402bda7)
![タイトル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1943511/da2fbc75-8d12-e314-ab96-d80ce8baee86.png)
## ゴール
下の画像のようなBoxのデータを
![Box_データプレビュー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1943511/8dd4a0cf-867d-dd5d-878f-f23f70206234.png)

このようにSnoeflakeで統合し
![snowflakeデータプレビュー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1943511/67cf72eb-c734-347d-27ee-51e9241b8829.png)
Lookerで可視化します(作成後は自動で最新値に更新できます)
![Looker可視化.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1943511/0c010e58-b334-d52a-92b3-a6c57f94c321.png)

## こんな人におすすめ
* Boxのデータをうまく活用して分析をしたいが、データの転送作業に苦戦している
* LookerやSnowflakeでBoxのデータを分析したい
* さまざまなデータの分析に時間の浪費を感じている

## 1. troccoでBox→Snowflakeの転送自動化
### 1-0. 事前準備
データの転送のためには[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=box_to_snowflake)のアカウント・Boxのアカウントが必要です。
無料トライアルを実施しているので、事前に申し込み・登録しておいてください！
[https://trocco.io/lp/index.html](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=box_to_snowflake)
（申込の際に、この記事を見た旨を記載して頂ければご案内がスムーズに行えます）
### 1-1. 転送元・転送先を決定
[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=box_to_snowflake)にアクセスして、ダッシュボードから「転送設定を作成」のボタンを押します。
![trocco転送設定-0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1943511/730035ea-091f-bbc2-34af-29674b93236c.png)


転送元に「Box」を指定し、転送先に「Snowflake」を選択して「この内容で作成」のボタンを押します。
![TROCCO転![snowflake接続1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1943511/de16265b-526e-9fda-b4b2-71067befc4e8.png)
送設定-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1943511/3732da96-52b1-a061-5f2b-899f6d1d8cd2.png)
すると、設定画面になるので、必要な情報を入力していきます。
### 1-2. Boxとの連携設定
あとで見たときに自分で分かるように転送設定の名前とメモを入力します。
![trocco概要設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1943511/d285673a-00cc-8468-5949-fc7832e46e9f.png)
次に「転送元Boxの設定」内の「接続情報を追加」ボタンを押します。
![trocco_box接続情報_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1943511/d1250831-9250-b567-4f8a-966c28e821f9.png)
別のタブでBoxの接続情報の新規作成画面が開きます。
接続情報を作成するためにJSONファイルを取得する必要があります。
![trocco_box接続情報_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1943511/32502ad4-7c85-15f4-bbd0-bc1c8c9e8a06.png)
JSONファイルの取得方法は以下の通りです。
[https://trocco.zendesk.com/hc/ja/articles/900004862986](https://trocco.zendesk.com/hc/ja/articles/900004862986-box%E3%81%AE%E6%8E%A5%E7%B6%9A%E8%A8%AD%E5%AE%9A%E4%BD%9C%E6%88%90%E6%89%8B%E9%A0%86%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
> １．Boxの開発者コンソールにログインし、マイアプリより「アプリの新規作成」を押してください。
２．カスタムアプリを作成してください。また、このとき「サーバ認証による認証」を選択頂くようにお願いします。
３．カスタムアプリ作成後に「構成」タブに移動し「公開キーの追加と管理」より「公開キー」を追加してください。
４．3より取得したJSONファイルを「カスタムアプリ設定ファイル」に登録してください。
問題がなければ保存します。転送設定画面に戻り、接続情報の「接続情報を読み込む」ボタンを押すと、先ほど作成した接続情報が選択できるようになります。

![trocco_box接続情報_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1943511/804101e4-a81a-e11e-b889-e9d36ae4ef08.png)
### 1-3. Boxからのデータ取得設定
次に、取得するデータの指定します。

- フォルダーID
Boxの管理画面より該当のフォルダーに遷移し、URLからフォルダーIDを取得してください。

- パスプレフィックス
取得対象のファイル名のパスプレフィックスを指定してください。(現状ですと、第1階層のファイルデータのみ取得可能です)

- 入力ファイル形式
入力ファイル形式を指定してください。

![box情報追加.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/f5261b71-c6e4-199a-205a-4c1aef415093.png)
### 1-4. 転送先Snowflakeの設定
転送元と同様に設定していきます。Snowflakeの接続情報を作成していきます。
転送先となるSnowflakeの接続先ホスト、ユーザー名、及びパスワードが必要です。
![snowflake接続０.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1943511/edb746e4-6655-9ff5-dab4-5b0110d567ee.png)
先ほど作成した接続情報を選択し、転送先とするウェアハウス、データベース名、スキーマ名を設定します。
転送モードに関しては`replace`を選択します。各転送モードの詳細は[こちら](https://docs.trocco.io/s/article/転送先-Snowflake)の「転送モードについて」をご確認ください。
![snowflake接続1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1943511/261dd4d2-57a7-2ec7-67b5-88551ec726d3.png)
これで入力は完了です。「保存して自動データ設定・プレビューへ」をクリックし、確認作業に進みましょう。
### 1-5. データのプレビュー
少し待つと、転送元のデータがプレビューされます。ここではBoxから取り込んだデータが表示されています。
![スキーマプレビュー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1943511/28c4b1c9-ed9c-14d7-d2a5-af109e2b6c2b.png)
転送したいデータが取れているので、このまま「スケジュール・通知設定」に進みます。
### 1-6. スケジュール・通知設定
「スケジュール・トリガー設定」タブを開きます。

![スケジュール設定0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1943511/aa4d7a48-34d5-e3f0-5257-8a2c69043f52.png)

「スケジュールを追加」ボタンを押すと、以下のような入力欄が出てきます。ここで実行スケジュールを設定することで、転送を定期的に実行し自動化することが出来ます。
![スケジュール設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1943511/0c9c7e35-b106-8e65-e004-9dd8ce799f37.png)
### 1-7. データ転送ジョブの実行
設定は以上です。最後に、手動で転送ジョブを実行し、Snowflakeにデータを送ります。
手動で実行する場合はジョブ詳細画面の「実行」ボタンを押します。

![転送実行.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1943511/dc37141f-3438-e53f-4ca5-bb71bc49d571.png)

これで転送は完了です。
## 2. Snowflakeの設定
特に設定することありません。データが転送されているので、今すぐに分析・可視化を行うことが出来ます。
データがきちんと送られているかは「データをプレビュー」押すことで確認してみます。
![snowflake.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1943511/8eea0f32-2518-4fa0-81f1-6a167a8148a9.png)
転送されていることが確認できました。
## 3. Lookerで可視化
それでは、これらのデータをLookerで可視化していきます。  
まずはSnowflakeとLookerの接続設定を行います。
管理タブを開いて「データベース」の「接続」を開きます。
![接続選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/7fab6490-acee-6690-a728-d3742491d9f3.png)
接続しているデータベース一覧が表示されています。ここで「Add Connection」→「Database Connection」から接続するデータベース情報を入力します。
![addconnection.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/0fb758d6-073d-48db-47a7-28ba6b6fe234.png)
![Looker接続.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1943511/ae63705a-29b5-6954-3624-eb573c485a0a.png)
Snowflakeのデータベースに接続できたら、次はデータを可視化するために必要なLookMLプロジェクトを作成していきます。 開発タブを開いて「LookMLプロジェクトの管理」に移動します。 
![プロジェクトの管理.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/4a6bf16b-e4e2-5b4a-401f-4b7ba6c7f9ab.png)
「New LookML Project」からLookMLプロジェクトを作成します。 
![newlookerml.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/04bb62b5-3bbc-b6b3-4508-96a35ee93f53.png)
![Looker＿new.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1943511/80cff22c-55b0-b163-9941-dde03feee53d.png)
「Create Project」を押したら、エディタでmodelとviewを定義します。 後々必要になるので、modelの中ではexploreを設定しておきましょう。 (書き方が分からない場合はLookerの[公式ドキュメント](https://docs.looker.com/ja/data-modeling/getting-started/model-development)を参照してください)
![Looker＿model.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1943511/b195bb40-6ecb-793c-c0cc-0921f2507640.png)
![Looker＿view.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1943511/69d52150-0ff1-d992-d1b6-73dca269c835.png)
これで下準備が整いました。 トップページに戻って「New」からDashboardを作成します。 
![newdash.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/9bf025e6-72f2-b47d-0614-fd1256d87c20.png)
白紙のダッシュボードが作成されるので「box_snowflake_dash」と名前をつけます。
そして「Dashborardの編集」→「タイルの追加」を選択し、先ほどのmodel内で定義したExploreを選択します。
![explore.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1943511/b2b4a447-ac7b-9128-f9c9-4f20e8539465.png)
ディメンションとメジャーを設定し、Tileに表示したいデータをプロットします。例えば、キーワードのクリック率を分析したいときはディメンションに「年度」とメジャーに「総合」を選択します。
![可視化例１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1943511/6be53550-f664-b49f-377d-a93a3375f12b.png)
そのほかに必要なタイルを作成し、ダッシュボードにまとめていきます。
![Looker可視化.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1943511/c8640ce3-ed63-c2d7-9b70-f05bc2830740.png)
完成しました！
## まとめ
いかがでしたでしょうか。[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=box_to_snowflake)を使うとBoxのデータを、簡単にDWH(Snowflake)に貯めることが出来ます。
Snowflakeにデータを貯めると、Lookerと連携することでデータを使ってグラフを作り、可視化できます。
実際に弊社サービスの[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=box_to_snowflake)においても、マーケティングKPI等をこのような流れで収集・分析しています。
ぜひ広告データ分析の際にはご活用ください。
[https://trocco.io/lp/index.html](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=box_to_snowflake)
実際に試してみたい場合は、[無料トライアル](https://trocco.io/inquiry_trial/new?utm_medium=social&utm_source=qiita&utm_campaign=box_to_snowflake)を実施しているので、この機会にぜひ一度お試しください。(申込時に、この記事を見た旨を記載して頂ければスムーズにご案内できます)
その他にも広告やデータベースなど、様々な分析データをETL・転送した事例をまとめました。
[troccoの使い方まとめ（CRM・広告・データベース他）](https://qiita.com/hiro_koba_jp/items/2b2caa040804e402bda7)