初学者のためのAWS入門(5)-S3+Athena+QuickSightでデータ分析結果の可視化

ここでは、S3 + Athena + QuickSight を連携してデータ分析、データの可視化にトライしてみます。
データ分析がしたくてもデータ分析環境がない、データ分析環境が欲しくても初期費用が高い、
サーバー構築に時間がかかる場合は、この手順で今すぐデータ分析を始められます。

#### 初学者のためのAWS入門シリーズ
- [初学者のためのAWS入門(1)]
(https://qiita.com/mshinoda88/items/e7557227f7060b52d8ae) 
- [初学者のためのAWS入門(2) - CloudFormation入門1] (https://qiita.com/mshinoda88/items/c5b238212c2de850efdd) 
- [初学者のためのAWS入門(3) - CloudFormation入門2]
(https://qiita.com/mshinoda88/items/65e7e145c7ec943af403) 
- [初学者のためのAWS入門(4) - S3でBasic認証を設定してリポジトリを公開](https://qiita.com/mshinoda88/items/dfb1ee355fbcb08e47e5)
- 初学者のためのAWS入門(5) - S3+Athena+QuickSightでデータ分析結果の可視化 -> この記事です。
- [初学者のためのAWS入門(6) - Lambdaでサーバレス実行してみる](https://qiita.com/mshinoda88/items/1b44f2a19c0a0895ab60)

# 1. データの流れと設計

## 1-1. サービス概要

AWS上のシステム構成及びデータの流れは下記の図のようになる。
![aws_data_flow01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199265/56412215-f8bc-325f-847e-0c85b0585470.png)

#### Athena
- S3のデータに対して標準SQLで分析が出来るサービス。
- Athenaはサーバーレスなのでサーバーの構築や管理が不要。<br>
→ metadata管理も Athena がやってくれる。
- Athenaの詳細については [Athena公式ページ](https://aws.amazon.com/jp/athena/) をご参照ください。

#### QuickSight
- AWSが提供しているBIサービス。
- データの可視化はもちろんアドホックな分析などで活用できる。
- QuickSightの詳細については
 [QuickSight公式ページ](https://aws.amazon.com/jp/quicksight/) 
  をご参照ください。

## 1-2. Athena の料金詳細

- スキャンされたバイト数に対して課金される。→データ 1 TB あたり 5.00USD
- バイト数はメガバイト単位で切り上げられ、10 MB 未満のクエリは 10 MB と計算される。
- CREATE TABLE、ALTER TABLE、DROP TABLE などの Data Definition Language (DDL) ステートメント、パーティションを管理するステートメント、または正常に実行されなかったクエリに対しては課金されない。
- キャンセルされたクエリは、スキャンされたデータ量に基づいて課金される。
- データのパーティション化により、Athena でスキャンするデータ量を制限できる。
　→　これにより、コストの削減とパフォーマンスの向上につながる。
- クエリごとのスキャンされたデータ量は、Athena コンソールで確認できる。

## 1-3. 利用データ
鎌倉市 職員の給与データ
https://www.city.kamakura.kanagawa.jp/opendata/kyuuyo.html

H26〜H29年度の給与データを利用することにします。
https://github.com/mshinoda88/aws/tree/master/athena

csvファイルには職員一人ひとりに対する年間人件費情報が記録されている。
<img width="943" alt="salary01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199265/398a7b4d-f2fb-0f80-4ed3-3cc82a5b6574.png">

## 1-4. S3にデータ配置
S3バケット「bkt-sampledomain01」にデータを配置します。
＜ファイル名＞
bkt-sampledomain01/year=26/h26_salary.csv
bkt-sampledomain01/year=27/h27_salary.csv
bkt-sampledomain01/year=28/h28_salary.csv
bkt-sampledomain01/year=29/h29_salary.csv

<img width="629" alt="s3_02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199265/24104d4e-65dd-0a60-0805-a7ae395bffbf.png">

次に、Athena設定、QuickSight設定の順で見て行きます。

# 2. Athena設定

AWSメニュー画面でAthenaを選択します。
<img width="655" alt="athena_01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199265/d2a0f968-4b44-cf2e-f698-19d82c3ce190.png">

「Databases」を選択すると、データベース一覧が確認出来ます。
<img width="742" alt="athena_02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199265/19ed940b-4ada-f440-be2a-0a55fb2bb040.png">

「Add table」でテーブル作成する。
datadase: 「sample01」
table: 「tbl_sample01」
S3: 「s3://bkt-sampledomain01/」

<img width="1300" alt="athena_04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199265/f9c4217e-486f-a136-d929-5a7bb216ab33.png">

CSVを選択。
<img width="608" alt="athena_05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199265/d153910e-250e-3c86-b5f0-8867b995a8d3.png">

「Bulk add columns」を押下。

<img width="776" alt="athena_06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199265/6d12a08c-6d49-5096-8522-5ba513435564.png">

「no int,class string,salary_month int,fuyou_month int,area_month int,house_month int,commune_month int,sp_allowance int,over_allowance int,holiday_allowance int,yakin_allowance int,manager_allowance int,day_night_allowance int,manager_sp_allowance int,salarly_month int,kimatsu_lastyear int,kinben_lastyear int,salarly_year int」
を入力する。
<img width="532" alt="athena_09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199265/01744670-ab4c-9503-75ae-6746471afc96.png">

パーティションとして、「year」カラムを記入。
<img width="720" alt="athena_10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199265/669c16b6-c45b-aeef-9d8f-b683c7d6558d.png">

Partition化されているTableの場合は「MSCK REPAIR TABLE」コマンドでPartition情報をロードする必要がある。
「MSCK REPAIR TABLE tbl_sample01」
<img width="944" alt="athena_12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199265/ae50fac1-af1a-0753-5a07-847effa0c53b.png">

これでAthenaの設定は完了。では、Select文でデータを確認してみます。
「select * from tbl_sample01」

# 3. QuickSight でデータの可視化

TODO