LoginSignup
1
1

More than 1 year has passed since last update.

[AWS Athena] 入門 ローカルのCSVをS3にアップロードしAthenaでクエリ叩くまで

Posted at

本日、初めてAtehnaを使い、様々なエラーやマニュアル・他人の記事の睨めっこの格闘の末に、
ようやくローカルに保存していたCSVファイルをSQLで読み込むことができたので入門者向けにその手法を解説します。

今回はローカルにこちらのようなCSVファイルを用意しました。
スマートフォンの機種とメーカー、発売日がリストになったCSVです。

image.png

AtenaはS3に保存されているファイルをデータソースにして、SQLでデータの読込が出来るサービスなので、
まずはS3にアップロードするところから始まります。

image.png

アップロードが完了したら、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');

image.png

  • 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

image.png

SQLさえ実行できれば、Atena上でデータ加工・変換も出来るし、加工後のデータをS3に保存することも可能。同じAWSサービスのQuick SightというBIとも連携できるので今後重宝しそう。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1