Amazon Athena を早速試してみた

# Amazon Athena とは

![スクリーンショット 2016-12-01 10.15.05.png](https://qiita-image-store.s3.amazonaws.com/0/100723/520327c3-e308-5d31-b619-840179ba47c1.png "スクリーンショット 2016-12-01 10.15.05.png")

re:Invent で今日発表された Amazon Athena。
S3 に配置されたデータをSQLライクな命令で検索できるというもの。
さながら Amazon版 BigQuery といった風合いで、なかなか興味深かったので早速試してみました。

## 料金について

いちばん大事なやつですね。

> Price Per Query
> $5 per TB of data scanned.

というわけで、1TBのデータスキャンあたり 5ドルかかるようです。

おっと、怪しい記述があるぞ。

> You are charged standard S3 rates for storage, requests, and data transfer. By default, query results are stored in an S3 bucket of your choice and are also billed at standard Amazon S3 rates.

ということなので、標準のS3の利用料金もかかるようです。
Athena が裏でGETリクエストを発行したりデータ転送したりしますが、それは標準のS3のレートで計算されますよ。と。

## リージョンについて

今は N.Virginia にのみデプロイされているようで、Oregon その他。と展開してくようです。

### データセットの配置について

N.Virginia にのみデプロイされている。ということですが
データセットのリージョンはどこにあってもいいようです。
ただし、クエリの実行時間が増加し、リージョンが異なるのでデータ転送に課金されます。（同一リージョンの場合は課金されないはずです）

## Try It!

早速使ってみましょう。

### データセットの準備

日本郵政のサイトで提供されている郵便番号データベースを使うことにしました
http://www.post.japanpost.jp/zipcode/dl/kogaki-zip.html

ここから各都道府県のcsvファイルを取得します。
全国版もありますが、Athena の使い心地を試すにも複数のファイルをスキャンさせたいので、今回はバラバラに取ってS3にアップロードします。

![スクリーンショット 2016-12-01 11.11.28.png](https://qiita-image-store.s3.amazonaws.com/0/100723/dd0e872e-f04c-c4a0-2c7c-e83fc31ba7a0.png "スクリーンショット 2016-12-01 11.11.28.png")

※ DLできるファイルは zip ですが、Athena は gzip しか食えないので変換してます

![スクリーンショット 2016-12-01 10.49.59.png](https://qiita-image-store.s3.amazonaws.com/0/100723/c4312576-d37e-5d54-b99a-00ee4c1da871.png "スクリーンショット 2016-12-01 10.49.59.png")

最初にテーブルを定義する必要があるようです。
テーブル名とか S3 のパスとかを聞かれますので、先程アップロードした内容を入力します。

![スクリーンショット 2016-12-01 10.50.23.png](https://qiita-image-store.s3.amazonaws.com/0/100723/57f4f1c1-79e2-4a49-31ed-92a6801fbebc.png "スクリーンショット 2016-12-01 10.50.23.png")

お前が指定した場所にあるファイルはなんだ？と聞かれるので、CSV だよ。って書きます。

![スクリーンショット 2016-12-01 10.54.51.png](https://qiita-image-store.s3.amazonaws.com/0/100723/9e25e43f-78fa-c3fa-10bc-100f54501b12.png "スクリーンショット 2016-12-01 10.54.51.png")
![スクリーンショット 2016-12-01 10.54.34.png](https://qiita-image-store.s3.amazonaws.com/0/100723/e8aa021d-d229-04f0-4766-45a0b102cd08.png "スクリーンショット 2016-12-01 10.54.34.png")

各カラムに名前と型をつけろ。と言ってくるので適当に設定します。

![スクリーンショット 2016-12-01 10.55.40.png](https://qiita-image-store.s3.amazonaws.com/0/100723/4a7e35df-227d-624b-e5a3-4a19b0831b1c.png "スクリーンショット 2016-12-01 10.55.40.png")

パーティションを設定しろ と言われます。
どうやら、パーティションというのは データセットの下にさらに YYYY-MM-DD/ みたいに日付で掘ってデータを置いておくことで
スキャン時に余分なデータを検索させないような仕組みっぽいです。
スキャン容量課金なので BigQuery と同じようなノウハウが生きてきますね。

![スクリーンショット 2016-12-01 11.12.33.png](https://qiita-image-store.s3.amazonaws.com/0/100723/46a49803-2cd7-4faa-0df1-27db38d5680d.png "スクリーンショット 2016-12-01 11.12.33.png")

というわけで、完了！うおー。文字化けしてるうううう。
CSV ファイルは Shift JIS なのが悪いようです。UTF-8 にしてアップロードし直しましょう。

![スクリーンショット 2016-12-01 11.37.28.png](https://qiita-image-store.s3.amazonaws.com/0/100723/c05ec9e3-e977-120b-51e9-6f2e918f019c.png "スクリーンショット 2016-12-01 11.37.28.png")

いえーい。これでデータセットの準備が整いました。

あっ…カラムがずれてる（お約束

#### おまけ：カラム定義の変更

できないっぽいので、一旦テーブルをドロップしましょう。

![Kobito.UIMNTw.png](https://qiita-image-store.s3.amazonaws.com/0/100723/6beaaa30-4456-bce4-3887-d5851fb1a622.png "Kobito.UIMNTw.png")

…おわらない！初日なんてそんなもんさ！

### クエリを発行

![スクリーンショット 2016-12-01 11.53.31.png](https://qiita-image-store.s3.amazonaws.com/0/100723/360ba55a-0532-fc92-d5d8-1886b9fea23e.png "スクリーンショット 2016-12-01 11.53.31.png")

3秒ほどで返ってきました。BigQuery と同じような感じかな。もっとでかいデータで試さないとわからないけど。
CSV が " でエスケープされてても、Athena はいい感じにしてくれないみたいなので、注意が必要そう。