😸
S3 Selectを軽く触ってみた
S3に適当なCSVをアップロードしてみる
S3 Select を実際にいじってみるために、下記のようなCSVを作成して、S3にアップロードしてみました。
一般的なカンマ区切りのCSVです。
"Name", "Session", "Score", "Completed"
"Gilbert", "2013", 24, true
"Alexa", "2013", 29, true
"May", "2012B", 14, false
"Deloise", "2012A", 19, true
アップロードしたCSVをS3上で選択して、
アクション>S3 Selectを使用したクエリ
を選択します。
S3 Selectを使用したクエリ
の画面はこんな感じ。
クエリ1
構文
SELECT * FROM S3Object d
かんたんなところから。
SQLライクな書き方なのね。
出力結果
Name, "Session", "Score", "Completed"
Gilbert, "2013", 24, true
Alexa, "2013", 29, true
May, "2012B", 14, false
Deloise, "2012A", 19, true
(出力形式を「CSV」にしています)
ちなみに、ヘッダーを出したくないときは、入力設定のところに、CSV データの最初の行を除外する
というチェックボックスがあるので、それにチェックを入れると、出力結果にはヘッダーが出力されないみたい。
※アップロードしたCSVの1行目がヘッダー行だった場合は、このチェックを入れないとうまく行かないみたいです!
クエリ2
構文
SELECT d.Session FROM S3Object d
出力結果
なんとこんなエラーが。
Invalid Path component, expecting either an IDENTIFIER or STAR, got: KEYWORD,at line 1, column 10.
どうみてもあってそうなんだけどな。。
じゃあ他のカラムはどうなんだと思って、やってみると上手く取得できるみたい。
構文
SELECT d.Name, d.Score, d.Completed FROM S3Object d
出力結果
Gilbert, 24, true
Alexa, 29, true
May, 14, false
Deloise, 19, true
原因
ググってみて、原因がわかりました。
ようは、AWS側で予約語があって、それを使う場合はエスケープしないとダメだったみたいです。
下記が予約語一覧です。
長いので端折りますけど、確かに「session」がありますね。
ということは大文字小文字は判別しないと言うことなのかな。。
absolute
action
add
all
.
.
schema
scroll
second
section
select
session
session_user
set
sexp
size
smallint
some
space
sql
sqlcode
sqlerror
sqlstate
.
.
write
year
zone
と思ったら、やはりそのようでした。
リンク貼っておきます。
クエリ3
構文
SELECT d."Session", d."Name", d."Score", d."Completed" FROM S3Object d
もはやクエリ2とおんなじなのですが、最終形態となります。
予約語にだけダブルクォーテーションを入れれば良さそうなのですが、
書式として揃えてしまいました。
出力結果
"2013",Gilbert, 24, true
"2013",Alexa, 29, true
"2012B",May, 14, false
"2012A",Deloise, 19, true
さいごに
アウトプットは画面上でポチポチすれば多少いじれるのね!
csvで出力したり、タブ区切りで出力したり、jsonで出力したり、、
へぇ〜!
Discussion