😸

S3 Selectを軽く触ってみた

2021/11/06に公開

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側で予約語があって、それを使う場合はエスケープしないとダメだったみたいです。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/s3-glacier-select-sql-reference-keyword-list.html

下記が予約語一覧です。
長いので端折りますけど、確かに「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

と思ったら、やはりそのようでした。
リンク貼っておきます。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/s3-glacier-select-sql-reference-select.html#s3-glacier-select-sql-reference-case-sensitivity

クエリ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で出力したり、、
へぇ〜!

GitHubで編集を提案

Discussion