概要

なぜデータベース、テーブル作成を実行するか?

S3のファイルはただの「データの塊」であり、Athenaがそれを理解するには「設計図」が必要となるから

具体例

S3に以下のCSVファイルがあるとする:

1,田中,2024-01-01
2,佐藤,2024-01-02
3,鈴木,2024-01-03

Athenaの視点:

  • これは何のデータ?
  • 1列目は何?数字?文字?
  • 2列目は名前?住所?
  • どこで列が区切られている?

テーブル定義の役割:

CREATE EXTERNAL TABLE users (
  id int,        -- 1列目は整数のID
  name string,   -- 2列目は文字列の名前  
  date string    -- 3列目は文字列の日付
)
STORED AS TEXTFILE  -- CSV形式
LOCATION 's3://my-bucket/data/'  -- ここにある

これで初めて:

SELECT name FROM users WHERE id = 1;
-- 「usersテーブルのnameカラムを取得、idが1の行」

データベースの役割

複数のテーブルを整理するフォルダのようなもの:

my_database/
├── users テーブル
├── orders テーブル
└── products テーブル

用語

各コンポーネント

ワークグループ (Workgroup)

役割: クエリ実行環境の設定・管理 • 機能: • 結果保存先S3バケット指定 • データスキャン上限設定 • 課金管理・タグ付け • : primary(デフォルト)、dev-team、prod-analytics

データソース (Data Source)

役割: データの接続先種別 • デフォルト: AwsDataCatalog(AWS Glue Data Catalog) • その他: Lambda connector経由で外部DB接続可能 • 実体: メタデータストア(テーブル定義の保存場所)

データベース (Database)

役割: テーブルの論理的なグループ化 • 機能: 名前空間の提供、権限管理の単位 • 作成: CREATE DATABASE sales_analytics; • : web_logs、sales_data、user_analytics

テーブル (Table)

役割: S3データファイルとスキーマの紐付け • 種類: 外部テーブル(EXTERNAL TABLE) • 必須要素: • 列定義(名前・型) • データ形式(CSV、JSON、Parquet等) • S3ロケーション