AWSコンソールからS3 Selectを使ってみた

S3バケット上のファイルをちょっと覗くのに便利だよ!
2020.04.24

こんにちは、CX事業本部の若槻です。

今回はAWSコンソールからAmazon S3 Selectを使ってS3バケット上のファイルを抽出してみました!

Amazon S3 Selectとは

Amazon S3 Selectとは、Amazon S3バケット上のCSVやJSON形式のオブジェクトから、必要なデータをSQLライクな構文で効率的に抽出できる機能です。2018年4月にAWSでGAされました。

使ってみた

早速AWSコンソールからS3 Selectをしていきます。

今回はバケットへアップロードした以下の2ファイルに対して行ってみます。

  • CSV形式のファイル「participant.csv」
  • JSON Lines形式のファイル「result.json」

image.png

CSVファイルの場合

まずCSVファイル「participant.csv」を対象としてS3 Selectしてみます。ファイルの内容は以下のようになります。

"Name", "Session", "Score", "Completed"
"Gilbert", "2013", 24, true
"Alexa", "2013", 29, true
"May", "2012B", 14, false
"Deloise", "2012A", 19, true 

バケット画面のファイル一覧で「participant.csv」を選択します。画面右にファイルの詳細が表示されるので[S3 Select]をクリックします。 image.png

ファイル「participant.csv」の[S3 Select]タブが開きます。 image.png

ファイルの形式として、[ファイル形式]は「CSV」、[区切り記号]は[カンマ]、[圧縮]は「なし」を選択し、「ヘッダー行」は[ファイルにはヘッダー行があります]にチェックし、[ファイルのプレビューの表示]をクリックします。 image.png

プレビュー欄にCSVファイルのプレビューが表示されました。[次へ]をクリックします。 image.png

[プレビュー]の下に[SQL式]が出てきます。[SQL エディタ]にすでにselect * from s3object s limit 5と入力されているので、このままSQL の実行をクリックして実行してみます。 image.png

[SQL 式]の下の[結果]欄でSQLの実行結果が表示されました。ヘッダー行を除くデータが取れています。 image.png

もちろんSQL文はいろいろ変えて実行できます。例えば同じファイルに対してselect s.Name, s."Session" from s3object s limit 2を実行すると下記のような結果が得られました。 image.png

JSON Linesファイルの場合

次にJSON Linesファイル「result.json」を対象としてS3 Selectしてみます。ファイルの内容は以下のようになります。

{"name": "Gilbert", "wins": [["straight", "7♣"], ["one pair", "10♥"]]}
{"name": "Alexa", "wins": [["two pair", "4♠"], ["two pair", "9♠"]]}
{"name": "May", "wins": []}
{"name": "Deloise", "wins": [["three of a kind", "5♣"]]}

途中の操作は省略しますが、ファイルの形式として、[ファイル形式]は「JSON」、[JSONタイプ]は[JSON 行]、[圧縮]は「なし」を選択すると、ファイルのプレビューが表示できました。 ![image.png](https://image.docbase.io/uploads/a0079a31-f2dc-449d-bbc8-a3eae71bc641.png =WxH)

SQL式select * from s3object s limit 5を実行すると、結果が取得できました。 image.png

補足

S3 Selectの便利なリファレンス

S3 Selectで使えるSELECTコマンドやSQL関数のリファレンスは下記ページが便利でした。

JSON形式とCSV形式、またAmazon S3 SelectとS3 Glacier Selectとで、使えるSELECTコマンドなどが少しずつ異なるようです。

JSONタイプの"JSON Lines"ってなに?

下記ページに詳しいです。要するに"改行区切りのJSONデータ"です。

システム構成によっては、Kinesis Data FirehoseからS3バケットに吐いたファイルがこの形式を取ることがあります。

ファイル形式の"Parquest"ってなに?

下記ページによると、正しくは"Apache Parquet"と言い、Hadoopのプロジェクトで使用する列指向のデータ形式とのことです。

S3 Selectを使用可能なファイル形式はJSONおよびCSVと、このParquestの3種となります。

S3 SelectとAmazon Athenaの違い

S3 Selectのコンソールでは以下のように述べられています。

  • S3 Select では、SQL 式を使用して 1 つの CSV、JSON、または Parquet ファイルからレコードを抽出できます。S3 Select では GZIP および BZIP2 圧縮ファイルおよびサーバー側の暗号化ファイルがサポートされます。コンソールを使用して、最大 128 MB のソースファイルから最大 40 MB のレコードを抽出できます。より大きなファイルまたはより多くのレコードを操作するには、API を使用します。
  • より複雑な SQL 式を必要とするデータを S3 で分析する場合は、以下を参照してください。

具体的な使い分けについては次回以降触れたいと思いますが、探した限りだと以下のページが詳しかったです。

おわりに

以上、AWSコンソールからAmazon S3 Selectを使ってS3バケット上のファイルを抽出してみたという記事でした。

S3バケットに保存されているファイルの中身をちょっと覗きたい!という時にファイルをダウンロードしなくてもコンソールからすぐに確認できるのは便利ですね。

また、コンソールからは一度に1ファイルしかS3 Selectは使えませんが、AWS CLIやBoto3を使ってプログラム的にS3 SelectのAPIを叩けば、複数ファイルへのSQL実行も容易にできそうです。

以上