【初心者向け】AthenaからクエリしてS3上のデータを取得してみた

2021.11.17

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

みなさんこんにちは、CX事業本部 IoT事業部のアベシこと阿部です!

今回、S3にアップロードしたCSV形式のデータにAmazon Athenaからアクセスしてみました。 その際のAthena及びS3の設定や操作内容を備忘録も兼ねて紹介いたします。

※内容は初心者による初心者様向けです。勉強が足りていないところが多いかと思いますので、気になる点があればコメント等でご指摘頂けますと幸いです。

Amazon Athena とは?

Amazon Athenaは「標準的なSQLを使ってAmazon S3のデータを直接クエリすることができる」サービスとなっています。サーバレスで実行可能なのでインフラの構築が必要無くすぐに使用する事ができます。また、Athenaは実行されたクエリに対してのみ料金がかかり、1TB毎に5USDとなっています。

今回はAthenaからSELECT文のクエリでS3上のデータを取得するところまでやってみました。

S3側のデータの準備

まず適当なCSV形式のファイルを用意します。

用意したファイルの中身は以下です。(社員名簿的な内容です)

CSVファイルのデータ中身

 

続いてS3にバケットを作ってファイルをアップロードします。

Athenaからクエリした結果をデータとして保存するバケットの設定が必要となりますので専用のバケットをS3に作成します。

以上でS3側の準備は完了です。

Athena側の設定

Athena側の設定ではクエリエディタの機能からテーブルを作成してクエリを出せる環境を作ります。

クエリエディタを使うには、Athenaのトップページの左側のペイン内の「クエリエディタ」か、右上の「クエリエディタを詳しく確認する」ボタンから作成画面に遷移します。

・クエリ保存先の設定

下の画面がクエリエディタです。まだクエリ結果の保存先を設定していない場合、先にS3バケットを保存先として設定する必要があります。下の画面の設定タブか右上の「設定を表示」のボタンから設定画面に遷移します。(これをやらずにクエリを出すとエラーになってしまいます)

次に下の設定画面から「管理」ボタンを押してクエリ保存先の設定画面に遷移します。

先ほどS3側の準備で作ったクエリ保存用のバケットを「参照」ボタンから指定します。

これでクエリ結果の保存先のバケットの設定ができました。

・クエリエディタの設定(テーブルの作成)

クエリを出す環境を作るにあたってテーブルの作成が必要ですので、下の画面の「作成」というプルダウンメニューから「S3バケットデータ」を選択します。

遷移した画面でテーブル名の指定やデータベース名の指定などのテーブル作成の諸々の設定を行います。

・テーブル名の設定します。(名前は一意である必要があります。)

・データベースの作成と名前の設定をします。(今回は新しくデータベースを作成しました。こちらも名前は一意である必要があります。)

・クエリ先のデータを指定します。先程S3に保存したCSVファイルの入っているバケット名を指定します。

・データの形式を指定します。クエリ先のデータ形式はCSVですのでCSVを選択します。

・テーブルにデータの列名を設定します。「列を追加」ボタンで列名を追加できます。またデータ型もここで指定できます。

・テーブルの設定はこれで完了です。最後に右下のボタンを押してテーブルを作成します。

・実際にクエリを出してデータをS3から取り出してみる!

クエリエディタの画面に戻り、作成したテーブル名の右にある3点ボタンメニューの「テーブルをプレビュー」を押すとSELECT文のクエリが作られます。

作成されたクエリ↓

SELECT * FROM "query_test_database_**********_1"."query_test_table_**********_1" limit 10;

実行ボタンを押すとS3上のデータが取得できました! S3に保存したCSVデータに、先程テーブル作成時に設定した列名が付与されたデータとなっています。

 

・クエリした結果の保存先

クエリで得られたデータが、Athenaに登録したクエリ保存先のS3バケットに保存されています。以下のようにCSV形式で保存されています。

このデータをダウンロードして開くと下の表の通りになっており、先程Athena上でクエリして取得したデータと同じ内容であることが確認できました。

attended_floor name department employee_number
6 佐藤 総務 1
5 田中 営業 2
4 阿部 開発 3
3 高橋 品質 4
2 伊藤 生産技術 5
1 鈴木 生産管理 6

・テーブル、データベースの設定内容はGlueに登録されています

先程作成したテーブル及びデータベースの内容はAmazon Glueで確認ができます。左のペインからテーブルやデータベースを選択すれば登録内容が見れます。また、テーブル作成時に設定した列名やデータ型の編集などもここで行えます。

最後に

今回初めてAthenaからクエリを実行し、S3からデータを取り出してみました。

テーブルの作成に多少工数がかかりましたが、クエリを出すこと自体は直感的に行えて初心者にも扱いやすいサービスだと思いました。また、Athenaがサーバレスサービスということから、すぐに使って試せるは非常に利便性が高いと思いました。今後SELECT以外のクエリの検証も行ってみたいと思います。

今回投稿した内容が誰かの役に立ってくれますと幸いです。ご覧頂きましてありがとうございました。

以上。