【新機能】Amazon QuickSightがAmazon Athenaをサポート!
こんにちは、大雪で飛行機が欠航になって自宅でブログを書いているせーのです。今日は出たばかりの新サービス「QuickSight」の新機能のご紹介です。
QuickSightとAthena
QuickSightは様々なデータを簡単な操作でグラフとして表示できるBIツールです。このブログを見ている方はちょうどQuickSightのアドベントカレンダーをやっていたのでよく目にしているサービスかと思います。QuickSightを使うとこんなグラフが書けます。
カラフルでいい感じですね。
一方AthenaはS3に入っているデータを標準SQLを使って分析することができるサービスです。Athenaにテーブルを作り、S3のバケットを指定してSQLを流すと欲しいデータが引っかかります。つまり、S3にとにかく何も考えずにデータを投げ込んでおいて、後でAthenaを使って必要なデータだけを拾い上げていく、という方法が取れるわけです。 これはApacheのログをS3に溜めてAthenaで取り出している様子です。
見た目はほぼDBのクライアントツールと変わらない感じですね。データソースがS3とはとても思えません。
今回はこの2つの新サービスを組み合わせた機能のご紹介です。Athenaで吸い上げたデータをデータソースとしてQuickSightで表示する、というものです。ペンとアッポーがオーン!となる感じですね。
ユースケース
AWSのブログではこの機能のユースケースとしてIoTでの利用が提示されています。AWS IoTからデータをKinesis Firehoseを使用してS3に流し込み、それをAthenaで分析して、必要なデータをQuickSightで可視化する、という流れです。
IoTのデータを可視化する時にどのデータストアを使うのか、という点は確かに悩みどころです。Redshiftは強力なのですがある程度の規模感が求められます。S3に入れておけば堅牢性もありコストも安いので安心ですね。 Firehoseの利点は「設定が簡単」ということと「Kinesisならではの安心感」という所にあります。AWS IoTのRuleから直接S3にデータを流すことも出来るのですがKinesisをはさむことでどこかに障害が起こった時のリトライや急激にデータ量が増えた時の流量の調節等、手動だと非常に手間のかかる実装が必要な部分を全て請け負ってくれます。IoTのようなセンサーデータを扱う際にKinesisの果たす役割は大きいです。
それではチュートリアルをやってみましょう。今回は心拍センサーのデータをダミーのスクリプトから流してみます。
やってみた
それではやってみましょう。Firehose、QuickSightは東京リージョンではまだ使えませんのでバージニアリージョンを使います。
Firehose、S3の設定
まずはFirehoseの設定です。
S3バケットを新規に作成し、Delivery名を決めて作成します。今回はチュートリアルどおりに「IoT-to-BI-Example」とします。
AWS IoTの設定
つぎにAWS IoTのRulesを作成します。これもチュートリアル通り「/health/#」にデータが飛んできたらFirehoseに流すように設定します。
サンプルデータの作成
つぎはクライアントでサンプルデータを作って流します。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の設定
データを放置している間にAthenaの設定を行います。Athenaのコンソール画面を開きます。
サンプルが見えてますね。データベースを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/'
どれくらいデータが溜まっているかユーザID毎のレコード数を見てみます。
SELECT userid, COUNT(userid) FROM heartrate_iot_data GROUP BY userid
もう少し欲しいですね。もうちょっと放置します。
QuickSightの設定
最後にこれらをQuickSightで可視化します。QuickSightを開きます。
[New Analyze]から[New DataSet]で新しいデータセットを指定します。
data source名として[AthenaDataSource]を指定します。
ここで「権限がないよ」と怒られている人はQuickSightに対してAthenaと上で作ったS3バケットに対するアクセス権限がない人です。そういう人は右上の人型のアイコンから[Mange QuickSight]を選択してAthenaとS3の権限を追加します。
そうして新たにdata source名を指定するとAthenaのテーブルが出てきますので先程作った[heartrate_iot_data]というテーブルを指定します。
後はウィザードのまま進んでいけばViewの画面にたどり着きます。
Viewまで来たら後は自分のみたい切り口でデータ項目をドラッグ&ドロップしてみて下さい。どんなグラフが書けるかは今年のQuickSightのアドベントカレンダーを参考にしてみて下さい。
まずはユーザー毎のレコード数です。
次にユーザー毎の心拍数のタイプです。
Filterで心拍数をHIGHの人だけにするにはこんな感じですね。
時間軸でのユーザー毎の心拍数平均値です。
こんな感じでどんどんグラフを作っていきましょう。
まとめ
いかがでしたでしょうか。これでS3をデータレイクとして活用しつつ、必要なデータを可視化することができました。特にビッグデータやIoTの分野では必要になるソリューションだと思いますので、是非やってみて下さい!