目次Category
はじめに
今回AWS技術研修内で行った、Amazon S3とAmazon Athenaを使ったCSVデータの検索・集計・売上分析についてまとめます。
主な作業内容は以下のとおりです。
CSVファイルをAmazon S3へ保存する
Amazon AthenaからS3上のCSVをテーブルとして参照する
SQLを使って検索・集計する
月別・カテゴリ別・地域別・商品別に売上を分析する
Amazon Athenaは、S3に保存されたCSVやログなどのデータに対してSQLを実行できるサービスです。通常のデータベースのようにサーバーを構築したり、あらかじめデータを別のDBへ取り込んだりせず、必要なときにS3上のデータを分析できます。
※ 記事内の [name] は自分の名前に置き換え、角括弧も削除してください。例:ojt-athena-yoshida-01
※ S3とAthenaは同じリージョンを使用してください。
今回の構成
今回のハンズオンでは、S3に保存したCSVをAthenaから参照し、SQLの実行結果もS3へ保存します。
CSVファイル
↓
Amazon S3
↓
Amazon Athena
↓
SQLで検索・集計・分析
↓
クエリ実行結果をS3へ保存最終的なS3の構成は次のようになります。
ojt-athena-[name]-01
└── athena-handson
├── data
│ ├── sales.csv
│ └── sales_additional.csv
├── analysis-data
│ └── sales_analysis.csv
└── results
└── Athenaのクエリ実行結果1. S3に分析データを準備する
Amazon S3の役割
今回の構成では、S3を分析対象データとAthenaのクエリ実行結果の保存先として使用します。
data には基本操作用CSV、analysis-data には売上分析用CSV、results にはAthenaのクエリ実行結果を保存します。
1-1. S3バケットとフォルダを作成する
Amazon S3を開き、次のバケットを作成します。
ojt-athena-[name]-01バケット内に次のフォルダを作成します。
athena-handson/data/
athena-handson/analysis-data/
athena-handson/results/1-2. 基本操作用CSVを用意する
基本操作で使用する sales.csv を作成します。
1-3. sales.csvをS3へアップロードする
sales.csv を次のフォルダへアップロードします。
s3://ojt-athena-[name]-01/athena-handson/data/アップロード後のS3 URIは次のようになります。
s3://ojt-athena-[name]-01/athena-handson/data/sales.csv2. Athenaで基本操作を行う
Amazon Athenaの概要
Amazon Athenaは、S3上のデータに対してSQLを実行して分析できるサービスです。
この章では、クエリ結果の保存先設定、データベースとテーブルの作成、検索・集計、CSV追加時の動作確認を行います。
2-1. Athenaのクエリ結果保存先を設定する
Amazon Athenaのクエリエディタを開き、次の手順で結果保存先を設定します。
- 右上のワークグループが primary であることを確認する
- 「クエリ設定」タブを開く
- 「管理」ボタンを押す
- 「Location of query result」に保存先を入力する
- 保存する
s3://ojt-athena-[name]-01/athena-handson/results/2-2. データベースを作成する
Athenaのクエリエディタで次のSQLを実行します。
作成後、クエリエディタ左側のデータベース選択欄から athena_handson_[name]を選択します。
2-3. 基本操作用テーブルを作成する
既存テーブルがある場合に備えて削除したあと、S3上のCSVを参照する外部テーブルを作成します。
※ LOCATION にはCSVファイル名ではなく、CSVが保存されているフォルダまでを指定します。
2-4. SQLで検索・集計する
データ件数を確認する
想定結果:
6全データを表示する
1万円以上の商品を検索する
想定される商品は、ノートPC2件とモニター1件です。
カテゴリごとの売上を集計する
想定結果:
category | total_quantity | total_sales
PC | 2 | 270000
周辺機器 | 8 | 900002-5. 2つ目のCSVを追加して確認する
同じ列構成の sales_additional.csv を作成します。
作成したCSVを、sales.csvと同じフォルダへアップロードします。
s3://ojt-athena-[name]-01/athena-handson/data/テーブルを作り直さず、件数確認のSQLを再実行します。
想定結果:
9ここで確認できること
Athenaは、テーブルの LOCATION に指定したフォルダ内のファイルを読み取ります。
そのため、同じ列構成のCSVを同じフォルダへ追加すると、追加したファイルも検索対象になります。
3. Athenaで売上データを分析する
ここからは日付と地域を追加したCSVを使い、月別・カテゴリ別・地域別・商品別に売上を分析します。
3-1. 分析用CSVを用意する
分析用の sales_analysis.csv を作成します。
3-2. 分析用CSVをS3へアップロードする
sales_analysis.csvを次のフォルダへアップロードします。
s3://ojt-athena-[name]-01/athena-handson/analysis-data/※ sales.csv と sales_analysis.csv は列構成が異なるため、同じ data フォルダには保存せず、別フォルダに分けます。
3-3. 分析用テーブルを作成する
分析用CSVを参照する sales_analysis テーブルを作成します。
件数を確認します。
想定結果:
123-4. 月別の売上推移を分析する
想定結果:
sales_year | sales_month | total_quantity | total_sales
2026 | 1 | 8 | 215000
2026 | 2 | 11 | 491000
2026 | 3 | 6 | 604000読み取れること: 1月から3月にかけて売上が増加しています。ただし、この結果だけで売上増加の原因までは断定できません。
3-5. カテゴリ別の売上を分析する
想定結果:
category | total_quantity | total_sales
PC | 7 | 1125000
周辺機器 | 18 | 185000読み取れること: 販売数量は周辺機器の方が多い一方、売上金額はPCの方が大きく、単価の高い商品が全体売上に大きく影響しています。
3-6. 地域別の売上を分析する
想定結果:
region | record_count | total_quantity | total_sales
大阪 | 6 | 14 | 780000
東京 | 6 | 11 | 530000読み取れること: 大阪の売上は東京より250,000円高くなっています。ただし「大阪だから売上が高い」とは断定できません。大阪では単価の高いデスクトップPCが販売されており、商品構成が売上差に影響している可能性があります。
3-7. 商品別売上ランキングを作成する
想定結果:
product_name | total_quantity | total_sales | sales_rank
デスクトップPC | 3 | 620000 | 1
ノートPC | 4 | 505000 | 2
モニター | 3 | 105000 | 3
ヘッドセット | 2 | 24000 | 4
Webカメラ | 3 | 21000 | 5
キーボード | 2 | 16000 | 6
USBメモリ | 5 | 10000 | 7
マウス | 3 | 9000 | 8読み取れること: 最も売上が高い商品はデスクトップPCで、次にノートPCが続きます。
3-8. 分析結果から分かること・分からないこと
SQLで確認できるのは「登録されたデータ内の事実」
今回のSQLからは、月別・カテゴリ別・地域別・商品別の売上差を確認できます。
一方で、「大阪だから売上が高い」「3月だから売上が増えた」といった原因までは、今回の利用データだけでは断定できません。
原因を調べるには、キャンペーンの有無、在庫数、値引き、原価と利益率、顧客数、アクセス数などの追加データが必要になります。
4. 後片付け
ハンズオン終了後、不要であればAthenaのテーブルとデータベースを削除します。
S3上のデータも不要であれば、次の配下を削除します。
s3://ojt-athena-[name]-01/athena-handson/data/
s3://ojt-athena-[name]-01/athena-handson/analysis-data/
s3://ojt-athena-[name]-01/athena-handson/results/※ S3バケットを削除する場合は、先にバケット内のオブジェクトを削除して空の状態にします。
先にオブジェクトを削除しないとバケット自体の削除が行えません。
まとめ
今回のハンズオンでは、Amazon S3に保存したCSVファイルをAmazon Athenaから参照し、SQLを使って検索・集計・売上分析を行いました。
今回のポイントは、Athenaがデータを別のデータベースへ移さず、S3上のファイルをそのままSQLで分析できることです。
また、集計結果から「何が起きているか」は確認できますが、「なぜ起きたか」を判断するには追加データが必要になることも確認できました。
実際の利用パターンとしては、購入履歴や、サイトのアクセスログなどをCSVファイルに蓄積し、それをAthenaで分析して傾向をつかむなどの用途として利用します。(簡単なものだとALBの設定でログの集積が可能)
参考にした記事
今回のハンズオンを作成するにあたり、以下の記事・ドキュメントを参考にしました。
DevelopersIO
【初心者向け】AthenaからクエリしてS3上のデータを取得してみた
S3に保存したデータをAmazon Athenaから参照し、テーブル作成やSQLによるデータ取得を行う流れを確認する際に参考にしました。
【初心者向け】Application Load Balancerのアクセスログを、Amazon Athenaで色々なクエリを実行し分析してみた
Application Load BalancerのアクセスログをS3へ保存し、Athenaを使って分析する例が紹介されています。 Athenaの具体的な業務利用をイメージする際にも参考になります。
AWS公式ドキュメント
Getting started with Amazon Athena
Amazon Athenaでデータベースやテーブルを作成し、S3上のデータに対してクエリを実行する基本的な流れを確認する際に参考にしました。
同じカテゴリーの記事
同じカテゴリの記事を読む