眠れない夜の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のディレクトリ名を入力
②次にファイルのフォーマットを指定。
③次にカラム定義。
④で最後に「Configure Partitions」
なんじゃこれは?明日も早いし調べてる時間もないからとりあえず無視。
これでテーブル作成。
おぉ、できた!
こういうのって、大体1回目は失敗するのに。こいつは簡単だな。
で肝心のパフォーマンスを確認。
select * from test1;
結果は0.6秒。遅っ!
う〜ん、これ、ファイルとレコード件数が増えたらどうなってしまうんだろう、、、
ってことで、さっきと同様の1,000レコードのファイルを1,000個を作ってS3にアップロード。(カラム1個で数字がさっきの続きで1001〜100000)
コンソールに100,000件も出ないだろうから、今度は件数を取ってみよう。
select count(*) from test1;
結果は2.89秒。致命的に遅い、、、
う〜ん、ファイルを1個で同じ件数にしてみたらどうだろう。
結果は0.78秒。さっきより早くなったが、それでも遅い。
whereを付けて1件を検索したらどうだろう。
◆ファイル1,000個の方
select * from test1 where num=1;
select * from test2 where num=1;
結果は0.83秒。
同じような結果だな。
時計を見ると4時40分。そろそろ眠気が襲ってきたので、今日はここまでとするか。
今夜も眠れなかったらスノーモービルを試してみるか。
おやすみなさい。