【新機能】Amazon QuickSightがAmazon Athenaをサポート!

こんにちは、大雪で飛行機が欠航になって自宅でブログを書いているせーのです。今日は出たばかりの新サービス「QuickSight」の新機能のご紹介です。

QuickSightとAthena

QuickSightは様々なデータを簡単な操作でグラフとして表示できるBIツールです。このブログを見ている方はちょうどQuickSightのアドベントカレンダーをやっていたのでよく目にしているサービスかと思います。QuickSightを使うとこんなグラフが書けます。

quicksight-viz-type-area-line-chart_04

quicksight-tutorial-redshift_09

quicksight-treemap_02

カラフルでいい感じですね。

一方AthenaはS3に入っているデータを標準SQLを使って分析することができるサービスです。Athenaにテーブルを作り、S3のバケットを指定してSQLを流すと欲しいデータが引っかかります。つまり、S3にとにかく何も考えずにデータを投げ込んでおいて、後でAthenaを使って必要なデータだけを拾い上げていく、という方法が取れるわけです。
これはApacheのログをS3に溜めてAthenaで取り出している様子です。

Athena

見た目はほぼDBのクライアントツールと変わらない感じですね。データソースがS3とはとても思えません。

今回はこの2つの新サービスを組み合わせた機能のご紹介です。Athenaで吸い上げたデータをデータソースとしてQuickSightで表示する、というものです。ペンとアッポーがオーン!となる感じですね。

ユースケース

AWSのブログではこの機能のユースケースとしてIoTでの利用が提示されています。AWS IoTからデータをKinesis Firehoseを使用してS3に流し込み、それをAthenaで分析して、必要なデータをQuickSightで可視化する、という流れです。

athena_quicksight1

IoTのデータを可視化する時にどのデータストアを使うのか、という点は確かに悩みどころです。Redshiftは強力なのですがある程度の規模感が求められます。S3に入れておけば堅牢性もありコストも安いので安心ですね。
Firehoseの利点は「設定が簡単」ということと「Kinesisならではの安心感」という所にあります。AWS IoTのRuleから直接S3にデータを流すことも出来るのですがKinesisをはさむことでどこかに障害が起こった時のリトライや急激にデータ量が増えた時の流量の調節等、手動だと非常に手間のかかる実装が必要な部分を全て請け負ってくれます。IoTのようなセンサーデータを扱う際にKinesisの果たす役割は大きいです。

それではチュートリアルをやってみましょう。今回は心拍センサーのデータをダミーのスクリプトから流してみます。

やってみた

それではやってみましょう。Firehose、QuickSightは東京リージョンではまだ使えませんのでバージニアリージョンを使います。

Firehose、S3の設定

まずはFirehoseの設定です。

athena_quicksight2

S3バケットを新規に作成し、Delivery名を決めて作成します。今回はチュートリアルどおりに「IoT-to-BI-Example」とします。

athena_quicksight3

AWS IoTの設定

つぎにAWS IoTのRulesを作成します。これもチュートリアル通り「/health/#」にデータが飛んできたらFirehoseに流すように設定します。

athena_quicksight5

サンプルデータの作成

つぎはクライアントでサンプルデータを作って流します。pythonを使うのでboto3を最新にアップデートし、AWS Configureをバージニアリージョン(us-east-1)にしておきます。

sudo pip install --upgrade pip

aws configure
AWS Access Key ID [****************FJKQ]:
AWS Secret Access Key [****************iERn]:
Default region name [ap-northeast-1]: us-east-1
Default output format :

次にスクリプトをダウンロードしてローカルから叩きます。

chmod 777 heartrate.py
python ./heartrate.py
/Library/Python/2.7/site-packages/botocore/handlers.py:598: UnsupportedTLSVersionWarning: Currently installed openssl version: OpenSSL 0.9.8zh 14 Jan 2016 does not support TLS 1.2, which is required for use of iot-data. Please use python installed with openssl version 1.0.1 or higher.
  UnsupportedTLSVersionWarning
{"heartRate": 76, "userId": "Bailey", "rateType": "NORMAL", "dateTime": "2016-12-23 12:05:48"}
{"heartRate": 60, "userId": "Bonny", "rateType": "NORMAL", "dateTime": "2016-12-23 12:05:51"}
{"heartRate": 64, "userId": "Bella", "rateType": "NORMAL", "dateTime": "2016-12-23 12:05:52"}
{"heartRate": 64, "userId": "Ben", "rateType": "NORMAL", "dateTime": "2016-12-23 12:05:53"}
{"heartRate": 93, "userId": "Branden", "rateType": "NORMAL", "dateTime": "2016-12-23 12:05:55"}
......

データが[/health/heartrate]に流れていきます。S3を見てみましょう。

athena_quicksight6

データが着々と入っているようです。このまま数時間放置します。

Athenaの設定

データを放置している間にAthenaの設定を行います。Athenaのコンソール画面を開きます。

athena_quicksight7

サンプルが見えてますね。データベースをdefaultにして先程のS3バケットからテーブルを作ります。

CREATE EXTERNAL TABLE heartrate_iot_data (
    heartRate int,
    userId string,
    rateType string,
    dateTime timestamp)
ROW FORMAT  serde 'org.apache.hive.hcatalog.data.JsonSerDe'
with serdeproperties( 'ignore.malformed.json' = 'true' )
LOCATION 's3://iot-to-bi-example/Iot_to_bi_example/'

athena_quicksight8

どれくらいデータが溜まっているかユーザID毎のレコード数を見てみます。

SELECT userid, COUNT(userid) FROM heartrate_iot_data GROUP BY userid

athena_quicksight9

もう少し欲しいですね。もうちょっと放置します。

QuickSightの設定

最後にこれらをQuickSightで可視化します。QuickSightを開きます。

athena_quicksight10

[New Analyze]から[New DataSet]で新しいデータセットを指定します。

athena_quicksight11

data source名として[AthenaDataSource]を指定します。

athena_quicksight12

ここで「権限がないよ」と怒られている人はQuickSightに対してAthenaと上で作ったS3バケットに対するアクセス権限がない人です。そういう人は右上の人型のアイコンから[Mange QuickSight]を選択してAthenaとS3の権限を追加します。

athena_quicksight13

athena_quicksight14

そうして新たにdata source名を指定するとAthenaのテーブルが出てきますので先程作った[heartrate_iot_data]というテーブルを指定します。

athena_quicksight15

後はウィザードのまま進んでいけばViewの画面にたどり着きます。

athena_quicksight16

Viewまで来たら後は自分のみたい切り口でデータ項目をドラッグ&ドロップしてみて下さい。どんなグラフが書けるかは今年のQuickSightのアドベントカレンダーを参考にしてみて下さい。

まずはユーザー毎のレコード数です。

athena_quicksight17

次にユーザー毎の心拍数のタイプです。

athena_quicksight18

Filterで心拍数をHIGHの人だけにするにはこんな感じですね。

athena_quicksight19

時間軸でのユーザー毎の心拍数平均値です。

athena_quicksight21

こんな感じでどんどんグラフを作っていきましょう。

まとめ

いかがでしたでしょうか。これでS3をデータレイクとして活用しつつ、必要なデータを可視化することができました。特にビッグデータやIoTの分野では必要になるソリューションだと思いますので、是非やってみて下さい!

参考サイト