エンジニア

2016.12.02

眠れない夜のAthena

眠れない夜のAthena

ハンズラボの小林です。
現在、re:Inventに參加するためベガスに来ています。
ベガスと言えばカジノ!
昨日の夜、ルーレットをやってみたところ、大当たり!
これがビギナーズラックというものか。
、、、と思ったら夢か。
現在、こちらの時間で12月1日の午前3時30分。
明日も朝8時からKeynoteがあるし早く寝なければ!
しかし、カジノの興奮が覚めず眠れない、、、
そんな眠れない夜には「Amazon Athena」(S3へ簡易SQLが可能に)を試してみよう。
東急ハンズはユニケージ開発手法を使っていて、マスタや売上、在庫といった業務データをテキストファイルで管理しているのでAthenaとの親和性が高そうだ。
ただ気になるのはパフォーマンスだ。
Athenaの内部で、単にファイルを読み込んでいるだけだったらパフォーマンスは良くなさそうな気がする。
とりあえず簡単なデータで試してみよう。
カラムは1個で、数字の1〜1000というデータ。
Linuxサーバー上で↓のようなファイルを作り、S3にアップロード。

seq 1 1000 > data1
aws s3 cp ./data1 s3://kobayashi-athena-test/test1/

次にAthenaのコンソール画面からテーブルを作成。(簡単かな?)
①DB名、テーブル名、S3のディレクトリ名を入力
athena1
②次にファイルのフォーマットを指定。
athena2
③次にカラム定義。
athena3
④で最後に「Configure Partitions」
なんじゃこれは?明日も早いし調べてる時間もないからとりあえず無視。
athena4
これでテーブル作成。
athena5
おぉ、できた!
こういうのって、大体1回目は失敗するのに。こいつは簡単だな。
で肝心のパフォーマンスを確認。

select * from test1;

athena6
結果は0.6秒。遅っ!
う〜ん、これ、ファイルとレコード件数が増えたらどうなってしまうんだろう、、、
ってことで、さっきと同様の1,000レコードのファイルを1,000個を作ってS3にアップロード。(カラム1個で数字がさっきの続きで1001〜100000)
コンソールに100,000件も出ないだろうから、今度は件数を取ってみよう。

select count(*) from test1;

athena8
結果は2.89秒。致命的に遅い、、、
う〜ん、ファイルを1個で同じ件数にしてみたらどうだろう。
athena7
結果は0.78秒。さっきより早くなったが、それでも遅い。
whereを付けて1件を検索したらどうだろう。
◆ファイル1,000個の方

select * from test1 where num=1;

athena9
結果は3.04秒。
◆ファイル1個の方

select * from test2 where num=1;

athena10
結果は0.83秒。
同じような結果だな。
時計を見ると4時40分。そろそろ眠気が襲ってきたので、今日はここまでとするか。
今夜も眠れなかったらスノーモービルを試してみるか。
おやすみなさい。

一覧に戻る