本日、初めてAtehnaを使い、様々なエラーやマニュアル・他人の記事の睨めっこの格闘の末に、
ようやくローカルに保存していたCSVファイルをSQLで読み込むことができたので入門者向けにその手法を解説します。
今回はローカルにこちらのようなCSVファイルを用意しました。
スマートフォンの機種とメーカー、発売日がリストになったCSVです。
AtenaはS3に保存されているファイルをデータソースにして、SQLでデータの読込が出来るサービスなので、
まずはS3にアップロードするところから始まります。
アップロードが完了したら、Atenaのコンソール画面に遷移し、CREATE TABLE ステートメントでデータベースを作成します。
次のようなステートメントを入力し、[Run Query (クエリの実行)] を選択するか、Ctrl+ENTER を押します。
CREATE EXTERNAL TABLE IF NOT EXISTS smartphone (
id string,
name string,
maker string,
relese_date string
)
ROW FORMAT SerDe 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SerDeProperties ("field.delim" = ",", "escapeChar"="\\", "quoteChar"="\"")
STORED AS TEXTFILE
LOCATION 's3://aws-athena-trial/test/'
TBLPROPERTIES ('has_encrypted_data'='false', 'skip.header.line.count'='1');
- EXTERNALはテーブルがS3に存在するファイルをデータソースにすることを意味する
- IF NOT EXISTSはテーブルがすでに存在する場合にエラーを出す
- CSVがデータソースの場合は、
ROW FORMAT SerDe org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
を指定すると良い。データが引用符””で囲まれている場合はROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
をつかう。 - LOCATION句はテーブルを作成するときに、基となるデータの Amazon S3 バケットの場所を指定する
CREATE TABLE ステートメントの完了後、下記のクエリを実行すると無事結果セットが得られる。
select *
from smartphone
SQLさえ実行できれば、Atena上でデータ加工・変換も出来るし、加工後のデータをS3に保存することも可能。同じAWSサービスのQuick SightというBIとも連携できるので今後重宝しそう。