ノンコーディングでS3のデータをRedshiftに入れ、Lookerで可視化する方法

## 概要
S3からRedshiftにデータを転送する方法は様々ありますが、コーディングや環境構築が必要になるケースが殆どだと思います。
また運用のことを考えるとジョブ管理や通知・再実行のことを考える必要があり、そこそこの規模のシステムを構える必要が出てきてしまいます。
そこで、今回はコーディング・環境構築不要で、運用サポート機能も充実している[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=s3_to_redshift)を使って、S3のデータをRedshiftに転送する方法をご紹介します。
![貼り付けた画像_2020_11_18_14_48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/ba721217-dbf1-d3cd-8282-7eb62cc7c8e9.png)

## ゴール
S3にある広告データから
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/f9dc857f-e21c-490a-87e9-803cd93ee134.png)

このようにRedshiftにデータ統合するまでを30分程度でやっていきます（作成後には最新値が自動で同期されるようにします）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/17b05046-c3e2-dabb-82b0-c0b7a5c351b3.png)
## こんな人におすすめ
- S3のデータをツールで可視化したい方
- S3のデータを分析基盤・DWH（データウェアハウス）に取り込む予定の方
- データ分析の前準備に疲れてしまった方

## 1. DWHと同期する手段の選定
### 1-1. DWHの選定
まずはデータをどこに集約するか、DWHを選定します。
- `Amazon Redshift`
- `Google BigQuery`
- `MySQL`
- `PostgreSQL` など
今回は`Amazon Redshift`を利用することにします。

### 1-2.転送手段の選定
Redshiftにデータを集約することが決まったところで、次は転送するための手段を選びます。
**1.** GUI・CLIでS3バケットからデータをダウンロードし、手動でRedshiftにアップロードする。
**2.** S3とRedshiftの各APIを、自前でプログラムを書いて連携させる。
**3.** Embulkを利用し、自前で環境を構築する。
**4.** [trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=s3_to_redshift)を利用し、画面上で設定する。
**1.** は単発の実行であれば良いものの、定期的に取り込む必要がある場合はタイムロスが多く、非効率な作業になりがちです。
**2.** はAPIのキャッチアップ工数+プログラムを書く工数+環境構築工数が発生する他、エラー対応などの運用工数も継続的に発生します。
**3.** も2と同じくEmbulkはある程度の専門知識が必要になり、自前で環境構築・運用を行う手間が発生します。エラーの内容が専門的で、詰まると大幅に時間を浪費してしまいます。  
そこで、Embulkの課題も解決してくれて、プログラムを書かずに画面上の設定で作業が完結する、**4.**の[**trocco**](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=s3_to_redshift)というSaaSを利用します。

## 2. [trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=s3_to_redshift)でS3→Redshiftの転送自動化
### 2-0. 事前準備
[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=s3_to_redshift)のアカウントおよびAWSのアカウントが必要です。
無料トライアルも実施しているので、前もって申し込み・登録をしておいてください！
[https://trocco.io/lp/index.html](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=s3_to_redshift)
（申込時に、この記事を見た旨を記載して頂ければスムーズにご案内できます）

### 2-1. 転送元・転送先を決定
[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=s3_to_redshift)にアクセスし、ダッシュボードから「転送設定を作成」のボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459450/45ead314-25c9-dda0-3363-665cc0be7e3e.png)
転送元にS3、転送先にRedshiftを選択し、転送設定作成ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/6f046d26-3dee-9997-ddf7-0b50207a1272.png)
すると、設定画面になるので、転送に必要な情報を入力していきます。

### 2-2. S3との連携設定
転送設定の名前とメモを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/3b167286-e3e1-cc9e-f30a-f57155ce5981.png)
転送設定の名前を決めたら、「転送元の設定」内の「接続情報を追加」ボタンを押し、S3の接続情報の設定を行います。
![貼り付けた画像_2020_11_18_15_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/c76001ad-16ce-ade4-f81a-0f5ba8738687.png)
接続設定の名前・AWSのアクセスキーID・シークレットアクセスキーを入力して保存します。
![貼り付けた画像_2020_11_18_15_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/0c81d2b3-e9bc-5292-2f86-eed026ea3fa2.png)
再度転送設定画面に戻り、「接続情報を読み込む」ボタンを押すと、作成した接続情報が選択できるかと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/fe55c20a-87de-a0ec-3212-ae8dec7d5249.png)

### 2-3. S3からのデータ抽出設定
これでS3との連携は完了です。
次に、S3の取得データを設定します。  
まずは必須項目の「リージョン」「バケット」をセレクトボックスの中から選択します。
![貼り付けた画像_2020_11_18_15_33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/a9c4e5f0-3fff-7863-3f46-4d7b6181e696.png)
次に、パスプレフィックスやファイル形式などの項目を必要に応じて埋めていきます。
![貼り付けた画像_2020_11_18_16_30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/df01a2a3-b4ac-3e74-13b9-c5dbf01de69b.png)
最後に接続確認が通るか確認します。
![貼り付けた画像_2020_11_18_15_36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/2df9fd5b-5f8a-b14a-4fbd-6c61df997d41.png)
大丈夫ですね。以上でS3側の設定は完了です。
次は転送先のRedshiftの設定を行っていきましょう。

### 2-4. 転送先Redshiftの設定
基本的には転送元と同じ要領です。
「接続情報を追加」ボタンからRedshiftの接続設定を行い、データベース・スキーマ・テーブルを入力します。
![貼り付けた画像_2020_10_23_15_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/af4acf3d-f2e8-9169-75cc-aeb022277b9f.png)
[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=s3_to_redshift)では一時データの保存にS3を利用するため、S3パケット・S3キープレフィックス・転送モードも必須項目です。これらも入力します。
![貼り付けた画像_2020_10_23_15_19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/555ee8e4-96d2-acff-c1c7-e1f39d161f5c.png)
最後に、接続確認が問題なく通るか確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/c4cc76b8-d13a-2825-c065-74dad24f9fb7.png)
これで入力は完了です。「保存して自動データ設定・プレビューへ」をクリックし、確認作業に進みましょう。
### 2-5. データのプレビュー
少し待つと、転送元のデータがプレビューされます。S3から取り込んだデータが表示されているのが確認できると思います。
問題なければ、「設定を完了する」を押して、スケジュールや通知設定に進みます。
![貼り付けた画像_2020_11_18_15_46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/9a7eea4a-94c7-3654-bbe5-20ed32ccab7b.png)

### 2-6. スケジュール設定
「スケジュール・トリガー設定」タブを開きます。
![貼り付けた画像_2020_11_18_15_50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/5992fbb6-ac39-28ce-c24c-6e5cd9972d1b.png)
以下のように実行スケジュールを設定することで、転送を自動化することが出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/d83643d4-17b6-f064-94d6-5687df4ee844.png)

### 2-7. 通知設定
必須の設定ではないですが、通知タイプ・通知条件・通知先を選択し設定を保存することで、EmailやSlackに通知を行うことが出来ます。
ジョブ失敗時だけでなく、転送レコード数を条件に指定し、レコードが少な過ぎた時にアラートを出すといったことが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/547db686-3f1c-b5ac-f9f7-91ba03766031.png)
また、必要な時のみ実行したい場合は、手動で転送を実行することも出来ます。
その場合は、転送設定詳細の「実行」ボタンを押して進めていきます。
![貼り付けた画像_2020_11_18_15_50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/351dba73-5118-bd0a-da18-bee2ab2b624a.png)
転送が完了しました。
![貼り付けた画像_2020_11_18_15_52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/953033cc-9a40-368b-0d2d-28a00f0ebc2a.png)
## 3. Redshiftの設定
特に設定することはありません。データが溜まっているので、今すぐに分析・可視化を行うことが出来ます。
データをプレビューして確認してみます。
![貼り付けた画像_2020_11_02_16_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/a3cebbac-c04c-e834-057b-d3d1662f650f.png)
広告データがRedshiftに同期されていることが確認できました。
## 4. Lookerで可視化
それでは、これらのデータをLookerで分析してみます。  
まずはRedshiftとLookerを接続します。
管理タブを開いて「Database」の「Connections」を開きます。
![貼り付けた画像_2020_11_02_16_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/1c49b7cb-6134-5b40-b443-6c6eb80301a4.png)
接続しているデータベース一覧が表示されています。ここで「Add Connection」→「Database Connection」から接続するデータベース情報を入力します。
![貼り付けた画像_2020_11_02_16_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/758e541a-32d6-3c71-1f25-39a8083f46bb.png)
![貼り付けた画像_2020_11_02_16_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/820f9990-216b-52d5-b436-51de296832f4.png)
Redshiftのデータベースに接続できたら、次はデータを可視化するために必要なLookMLプロジェクトを作成します。
開発タブを開いて「LookMLプロジェクトの管理」に移動します。
![貼り付けた画像_2020_11_02_16_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/53220d80-d1c7-34a2-64d3-6a503c9e0726.png)
「New LookML Project」からLookMLプロジェクトを作成します。
![貼り付けた画像_2020_11_02_15_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/0c186535-04b5-4578-aa37-148ae49f3a7d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/d3df3417-cdde-d88b-ddf6-77e18844bfe4.png)
「Create Project」を押したら、エディタでmodelとviewを定義します。
後々必要になるので、modelの中ではexploreを設定しておきましょう。
(書き方が分からない場合はLookerの[公式ドキュメント](https://docs.looker.com/ja/data-modeling/getting-started/model-development#adding_a_new_view_from_an_existing_database_table)を参照してください)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/e843223f-8d60-53fb-3f40-def1fb653867.png)
![貼り付けた画像_2020_11_18_16_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/be29c7cb-ab39-27c9-d72b-2fb7bd9ddd4e.png)
これで下準備が整いました。
トップページに戻って「New」からDashboardを作成します。
![貼り付けた画像_2020_11_02_16_18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/cf8f2f71-b374-ba31-0d65-7cad45ce2068.png)
白紙のダッシュボードができました。ここに各種グラフを追加していきます。「新しいTILE」を押します。
![貼り付けた画像_2020_11_18_16_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/51176a30-54e7-db3d-0da1-3f4a287c5ea6.png)
先ほどのmodel内で定義したExploreを選択します。
![貼り付けた画像_2020_11_18_16_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/a41e93b4-97cf-ff3f-ac79-a28987deb12d.png)
DIMENSIONSとMEASURESを設定し、Tileに表示したいデータをプロットします。ここではキャンペーンごとのクリック数を分析しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/7238695b-c7fc-015a-c294-63af2b9b038a.png)
これで一つTileが完成しました。この調子で他のTileも作成すると、今回のゴールであるデータダッシュボードが出来上がります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/98c3593c-cc64-c70b-2c71-b5e4856b3d5e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/17b05046-c3e2-dabb-82b0-c0b7a5c351b3.png)

## まとめ
いかがでしたでしょうか。[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=s3_to_redshift)を使うとコーディング・環境構築を行うこと無く、簡単にS3のデータをDWH(Redshift)に貯めることが出来ました。
また、Redshiftにデータを貯めると、Lookerを使ってデータを可視化することが出来ます。
実際に弊社サービスの[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=s3_to_redshift)においても、マーケティングKPI等をこのような流れで収集・分析しています。
ぜひ広告データ分析の際にはご活用ください。

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

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