Amazon Athenaをさわってみた

こんにちわ。JMAS 岸本です。

お待たせしております。
Amazon Rekognition(画像認識)をさわってみた その2の続きです!

上記の記事で、
画像をS3に置いただけでCSVファイルが作成されるまでやりました。

しかし、このままでは、
画像ファイルの数だけS3にCSVファイルが作成されてしまうので、
データの閲覧や抽出に手間がかかります。

EMRやRedshiftなどの選択肢もありますが、
今回は予告通り、Amazon Athenaを使ってデータの抽出をしたいと思います。

Amazon Athenaとは

S3内のデータを指定してスキーマを定義すると、SQLのクエリを投げる事で、
ファイルが分割されていようと、横断的にデータの抽出ができます。
加えて、コンピューティングリソースを用意する必要がないのも特徴です。

re:Invent2016のAthena発表時は、
マネジメントコンソールとJDBCにのみ対応していましたが、
5月の中旬に、API/CLIからのクエリ実行にも対応しています。→発表記事

※詳しくは→Amazon Athena

今回は、マネジメントコンソールでの操作を実施してみたいと思います。

データベースとテーブルの定義

マネジメントコンソールにログイン後、Athenaのページへ移動します。

Step1

初めての利用であれば、チュートリアルが始まるのですが、
このアカウントでは初めての利用では無いので、
“Catalog Manager”を選択し、”+ Add table”をクリックして下さい。
その後、画像の様に入力し、次へ

Step2

S3上のデータのデータのフォーマットを定義します。
今回はLambdaがRekognitionの結果をCSV形式でS3へ保存しているので、
“CSV”を選択し、次へ

Step3

カラム名/データ型を定義します。
Lambdaが出力するCSVの各列の要素を確認しながら定義していきます。

Step4

パーティションについては、今回は使用しませんので、
そのまま”Create table”を選択
※ここでパーティションを定義すると、
 データをスキャンする対象ファイルを絞り込む事が出来るので、
 コスト削減・パフォーマンス向上を図ることができます。
 Hiveフォーマット等、決まった形式でS3にファイルが保存されている場合は
 利用するべきですし、ファイルを保存する処理も意識した方が良いと思います。

画面遷移後、”Query successful.”の文字と、
左ペインに作成したデータベースとテーブルが表示されています。

ここからは、中央のQuery Editorにクエリを記載し、データを抽出してみます。

【補足】AthenaのSQLについて

Amazon Athena では、
標準SQLをフルサポートしたPrestoを基盤テクノロジーとしており、
SQL互換言語があるので、そこまで難しくありません。
※Prestoについては、ここでは言及しません。

全件取得

今回の為に、社内のメンバーに200枚ほど画像を追加していただきました。
横断的にファイルの中身が見えているかを確認する為、
まずは全件取得してみましょう。

下記SQL文をQuery Editerに入力し、”Run Query”をクリック

SELECT * FROM jumptable;

ResultsがQuery Editerの下部にクエリの結果が表示され、
異なるfilenameが混ざっている事がわかります。

レコード件数取得

次は、レコード件数の取得です。

下記SQL文をQuery Editerに入力し、”Run Query”をクリック

SELECT count(*) FROM jumptable;

全てのCSVファイルの合計で、2857レコードのデータがある事がわかります。

信頼度が95%以上のLabelの数を取得

ちょっとだけ条件を付けて、データを抽出してみたいと思います。
Rekognitionによる解析の結果、
95%以上の信頼度が付いているLabelのそれぞれの出現回数を抽出してみます。

下記SQL文をQuery Editerに入力し、”Run Query”をクリック

SELECT labelname , Count(labelname) FROM jumptable
WHERE
confidence > 95
GROUP BY labelname;


label毎のカウントが抽出出来ました。
下記、赤枠のアイコンをクリックすれば、
結果のデータをCSVとしてダウンロード出来ます。

何が多く写っている?

ダウンロードしたCSVを見てみます。

People,110
Human,110
Person,110
Food,7
Furniture,7
Plant,6
Outdoors,5
Chair,5
Flower,4
Cherry Blossom,4
Blossom,4
Potted Plant,3
Dessert,3
Architecture,3
Dinosaur,3
Lantern,3
Flora,3
Water,3
・
・
・

People,Human,Personと
人が写っている写真が多いようですね。
いろんなものが写っている写真を用意すれば、
数値としてもわかりやすかったのですが…

感想

今回は、同一の値が多いデータを対象としたので、
少しわかりにくかった部分がありました。
しかし、アクセスログ・センサーデータ・POS情報など、
大量のデータを横断的に見ることが出来るのは、非常に魅力的です。

また、APIやJDBCを使って、Athenaを動かす事で
・Lambdaと連携した、定期的なレポート出力
・BI等、他システムとの統合
も可能なので、使う場面は多いと思います。

株式会社jena様と弊社で共同開発している“Beacapp”
大量のデータを取り扱っているので、
Athenaを使う事でさらなる進化を遂げるかも知れません!

最後に

本ブログも、記事数は少ないものの、たくさんの人に閲覧いただき、
たくさんのフィードバックをいただいております。
本当にありがとうございます。

より魅力的なブログにする為、これからも頑張って参りますので、
よろしくお願いいたします!