3分でAWS Athenaを試す


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

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

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

前提条件

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

1.CSVファイルをS3に置く

これこれを任意のS3フォルダに配置。

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

testdata.csv
ID,Name,Price
1,林檎,100
2,洋梨,200
3,柘榴,300
testdata2.csv
ID,Name,Price
4,無花果,800
5,晩白柚,1600

とりあえず、AWSで。S3と入れてEnter。

バケットを作成するボタンをクリックして、適当な名前(test09271533)でバゲットを作成。
バゲット名はS3全体(リージョン別だったかな)で一意である必要があるので、日時くっつけるなりする。

今回はテストデータを置くだけなので、パブリックアクセスはOKにしておく。
ただ、本来は非常にヤバい設定なので、そこだけは留意しておくこと。

出来上がったら、ダウンロードしたファイルを放り込む。ドラッグ&ドロップでOK。

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

2.Athenaを使う

Athenaへ移動して、Get Startedをクリック。

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


Athenaはスキーマレスではないので、Create Tableをしてやる必要がある。

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

テーブル作成クエリ
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テーブルが作成されるのが左側ペインで確認できる。

あとはクエリを投げるだけ

3.終わりに

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


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