S3 SelectでRawデータを調べる
AWSのストレージサービスS3(Simple Storage Service)https://aws.amazon.com/jp/s3/
コスト面から利用企業の多いサービスであるS3。蓄積されたCSVファイルに対して調査を行えるのが、S3Selectである。
本記事は業務でS3Selectを利用する上でのRawデータ調査のTipsを紹介する。
早急に解決したい方は解決へ
目次
No | ページ内リンク |
---|---|
1 | 背景 |
2 | 課題 |
3 | 解決 |
4 | 注意 |
背景
S3にあるファイルはテーブルではなくCSVファイルである。データの中身の確認をするにはダウンロードするしか無いように思われる。
(あるいはRedshiftやAthenaなど別サービスにデータをロードし、確認)
しかし、大きなファイルをダウンロードして確認するのは非効率であるし、ローカルにデータを持つのはセキュリティ上制限される場合もある。
そこでS3Selectを利用して、SQLでファイルのデータを確認する。
課題
S3のCSVファイルをS3Selectで調査するにあたって困ったのが、条件での抽出である。
たとえば、下記のようなデータがCSVファイルとして保存されているとする。
1 | 2 | 3 |
---|---|---|
a | りんご | 100 |
b | みかん | 120 |
c | なし | 150 |
d | もも | 200 |
DBであれば、id, name, priceなどのように列名をつけてcreate tableすれば
select * from table where name = 'りんご'
のように簡単に抽出可能だが、列名がないCSVファイルではそうもいかない。
列名がないから列での条件付けが出来ないという問題があったのである。
解決
簡単に上記課題を解決する方法がある。
列番号での指定ができるのだ。
下記のように書けば、先ほどの抽出クエリと同じことができる。
select * from table where _2 = 'りんご'
こうして大きなサイズのCSVファイルをS3にある状態のまま、簡単に調査できる。
注意
S3SelectのクエリはCSVファイルの設定が影響する。
例えば、TSVファイルなのに区切りが,(カンマ)になっているなどでクエリのエラーとなる。
上記でうまくいかない場合は設定を確認されたし。
参考
公式のリファレンス
S3Selectについては下記がわかりやすい