３分でAWS Athenaを試す

３分でAthenaの機能を試してみる。

Athenaで何が便利か、こういう使い方もある、とかいうのは特に伝えない。
これだけ覚えておくだけでも、Accessで扱い辛い2GBを超えるデータを扱えたり
複数のCSVファイルでもまとめて楽に扱えるという利点はあると思う。

まずは触ってみて考えたい人向け。可能な限り画像付きで丁寧に解説する。

## 前提条件
- AWSを契約しておりアカウントがあること
- S3にデータを置き、クエリを投げるので（もしかしたら）数円レベルの課金がかかることを良しとすること

## １．CSVファイルをS3に置く
[これ](https://owl-public.s3-ap-northeast-1.amazonaws.com/opendata/testdata.csv)と[これ](https://owl-public.s3-ap-northeast-1.amazonaws.com/opendata/testdata2.csv)を任意のS3フォルダに配置。

ファイルはこんな感じ。シンプルなもの。

```text:testdata.csv
ID,Name,Price
1,林檎,100
2,洋梨,200
3,柘榴,300
```

```text:testdata2.csv
ID,Name,Price
4,無花果,800
5,晩白柚,1600
```

とりあえず、AWSで。S3と入れてEnter。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101086/4d453db9-4581-d618-489c-91ed5b7669d3.png" width=70%>

バケットを作成するボタンをクリックして、適当な名前（test09271533）でバゲットを作成。
バゲット名はS3全体(リージョン別だったかな)で一意である必要があるので、日時くっつけるなりする。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101086/88b19898-9a48-e96c-9f72-3ec89ee9a4c5.png" width=70%>

今回はテストデータを置くだけなので、パブリックアクセスはOKにしておく。
ただ、本来は非常にヤバい設定なので、そこだけは留意しておくこと。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101086/69e93ec5-d772-2cd0-cd21-9a0a85c52ef5.png" width=70%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101086/a271ad15-a98d-0b03-9ac0-5c8e39c15f10.png" width=70%>

出来上がったら、ダウンロードしたファイルを放り込む。ドラッグ＆ドロップでOK。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101086/34167e1f-fcf1-3587-b7bf-d5b8591c3108.png" width=70%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101086/977cbd48-0526-ccf9-d439-b63e9bdd18ab.png" width=70%>

**※ 同じようにして、output09271533というバケットも作成する。あとで必要になるので。**

##  ２．Athenaを使う

Athenaへ移動して、Get Startedをクリック。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101086/e2b45fb9-da40-5ef2-e81f-d3e05558cb17.png" width=70%>

先ずはクエリの結果を出力する場所を指定しなくてはならない。
バケット（この場合[output09271533]）さえ存在すれば下のフォルダは適当でとりあえず設定は通る。[^1]

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101086/6d46c281-89ba-450c-a6c2-1f323c71c25f.png" width=70%>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101086/f02330f3-54c4-5922-1602-cc0ec284ddbd.png)

Athenaはスキーマレスではないので、Create Tableをしてやる必要がある。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101086/14d7d503-f5c5-9ab7-bcb0-b20032e0e244.png" width=70%>

priceがintだったり結構適当だが、今回はこれで[^1]。
**あと、なぜか「Run Query」ボタンが非活性化されて押せないことがあるが、実行はCtrl+Enterでもできる。**

```sql:テーブル作成クエリ
CREATE EXTERNAL TABLE IF NOT EXISTS test (
  id int,
  name string,
  price int
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
  'serialization.format' = '1'
) LOCATION 's3://test09271533/'
TBLPROPERTIES (
  'has_encrypted_data'='false',
  'skip.header.line.count'='1'
  );
```

成功すると、testテーブルが作成されるのが左側ペインで確認できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101086/33408ef3-a0f2-021d-dbe7-3b21b79f3440.png)

あとはクエリを投げるだけ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101086/5a54c885-67d5-9ea4-f1c3-a6bb9dd45379.png)


##  ３．終わりに
とにかく動かすということに重点を置いたため項目などの説明はおざなりでした。
いったんクエリ投げるところまでいけば、後はオプションとか色々調べて便利・高速な使い方を探してみてください。

[^1]: S3ロケーションは S3://作成バケット/フォルダの構成で指定するので、例えば対象のバケットを開いたときのURLが「s3.console.aws.amazon.com/s3/buckets/test09271533」であれば、ロケーションは「s3://test09271533/」となる。