Skip to content

AWSで作るはじめてのETL【Redshiftテーブル】

概要

本データ活用にてレコードを収集するためのテーブル作成を行う。

Redshift

一覧よりRedshiftクリック

クエリエディタ v2

クエリエディタ v2を選択

ワークグループ選択

自身のワークグループをクリック

認証情報入力

Database user name and passwordを選択し、ユーザー名とパスワードを入力する。

(入力を求められない場合もある)

SQL実行

下記SQLを実行する

sql
-- users テーブル
CREATE TABLE dev.public.users (
    user_id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    age INT,
    gender VARCHAR(10),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

COMMENT ON TABLE dev.public.users IS 'ユーザー情報を管理するテーブル';
COMMENT ON COLUMN dev.public.users.user_id IS 'ユーザーID (主キー)';
COMMENT ON COLUMN dev.public.users.name IS 'ユーザー名';
COMMENT ON COLUMN dev.public.users.email IS 'メールアドレス (ユニークキー)';
COMMENT ON COLUMN dev.public.users.password_hash IS 'パスワードハッシュ';
COMMENT ON COLUMN dev.public.users.age IS '年齢 (0以上)';
COMMENT ON COLUMN dev.public.users.gender IS '性別 (male, female, other)';
COMMENT ON COLUMN dev.public.users.created_at IS '作成日時';
COMMENT ON COLUMN dev.public.users.updated_at IS '更新日時';

-- products テーブル
CREATE TABLE dev.public.products (
    product_id INT PRIMARY KEY,
    name VARCHAR(200) NOT NULL,
    description TEXT,
    price INT NOT NULL,
    stock INT NOT NULL DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
COMMENT ON TABLE dev.public.products IS '商品情報を管理するテーブル';
COMMENT ON COLUMN dev.public.products.product_id IS '商品ID (主キー)';
COMMENT ON COLUMN dev.public.products.name IS '商品名';
COMMENT ON COLUMN dev.public.products.description IS '商品説明';
COMMENT ON COLUMN dev.public.products.price IS '価格';
COMMENT ON COLUMN dev.public.products.stock IS '在庫数';
COMMENT ON COLUMN dev.public.products.created_at IS '作成日時';
COMMENT ON COLUMN dev.public.products.updated_at IS '更新日時';

-- orders テーブル
CREATE TABLE dev.public.orders (
    order_id INT PRIMARY KEY,
    user_id INT,
    total_price INT NOT NULL,
    order_status VARCHAR(50) DEFAULT 'pending',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
COMMENT ON TABLE dev.public.orders IS '注文情報を管理するテーブル';
COMMENT ON COLUMN dev.public.orders.order_id IS '注文ID (主キー)';
COMMENT ON COLUMN dev.public.orders.user_id IS 'ユーザーID (外部キー)';
COMMENT ON COLUMN dev.public.orders.total_price IS '合計金額';
COMMENT ON COLUMN dev.public.orders.order_status IS '注文ステータス';
COMMENT ON COLUMN dev.public.orders.created_at IS '作成日時';
COMMENT ON COLUMN dev.public.orders.updated_at IS '更新日時';

-- order_items テーブル
CREATE TABLE dev.public.order_items (
    order_item_id INT PRIMARY KEY,
    order_id INT,
    product_id INT,
    quantity INT NOT NULL,
    price INT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
COMMENT ON TABLE dev.public.order_items IS '注文アイテム情報を管理するテーブル';
COMMENT ON COLUMN dev.public.order_items.order_item_id IS '注文アイテムID (主キー)';
COMMENT ON COLUMN dev.public.order_items.order_id IS '注文ID (外部キー)';
COMMENT ON COLUMN dev.public.order_items.product_id IS '商品ID (外部キー)';
COMMENT ON COLUMN dev.public.order_items.quantity IS '数量';
COMMENT ON COLUMN dev.public.order_items.price IS '価格 (購入時点)';
COMMENT ON COLUMN dev.public.order_items.created_at IS '作成日時';

-- weather テーブル
CREATE TABLE dev.public.weather (
    weather_id INTEGER,
    date_time DATE,
    temperature INTEGER,
    weather_condition VARCHAR,
    created_at DATE,
    updated_at DATE
);

TRUNCATE TABLE public.weather;
COMMENT ON TABLE dev.public.weather IS '天候情報を管理するテーブル';
COMMENT ON COLUMN dev.public.weather.weather_id IS '天候ID (主キー)';
COMMENT ON COLUMN dev.public.weather.date_time IS '日時';
COMMENT ON COLUMN dev.public.weather.temperature IS '気温';
COMMENT ON COLUMN dev.public.weather.weather_condition IS '天候状態';
COMMENT ON COLUMN dev.public.weather.created_at IS '作成日時';
COMMENT ON COLUMN dev.public.weather.updated_at IS '更新日時';

完成

dev -> publicに5テーブルが出来てればOK

補足 ER図

上記DDLのER図は下記の通り

(一部DDLとは差異があります)

mermaid
erDiagram
    USERS {
        INT user_id PK "ユーザーID (主キー)"
        VARCHAR name "ユーザー名"
        VARCHAR email UK "メールアドレス (ユニークキー)"
        VARCHAR password_hash "パスワードハッシュ"
        INT age "年齢"
        VARCHAR gender "性別"
        TIMESTAMP created_at "作成日時"
        TIMESTAMP updated_at "更新日時"
    }

    PRODUCTS {
        INT product_id PK "商品ID (主キー)"
        VARCHAR name "商品名"
        TEXT description "商品説明"
        INT price "価格"
        INT stock "在庫数"
        TIMESTAMP created_at "作成日時"
        TIMESTAMP updated_at "更新日時"
    }

    ORDERS {
        INT order_id PK "注文ID (主キー)"
        INT user_id "ユーザーID"
        INT total_price "合計金額"
        VARCHAR order_status "注文ステータス"
        TIMESTAMP created_at "作成日時"
        TIMESTAMP updated_at "更新日時"
    }

    ORDER_ITEMS {
        INT order_item_id PK "注文アイテムID (主キー)"
        INT order_id "注文ID"
        INT product_id "商品ID"
        INT quantity "数量"
        INT price "価格 (購入時点)"
        TIMESTAMP created_at "作成日時"
    }

    WEATHER {
        INT weather_id "天候ID"
        DATE date_time "日時"
        INT temperature "気温"
        VARCHAR weather_condition "天候状態"
        DATE created_at "作成日時"
        DATE updated_at "更新日時"
    }

    USERS ||--o{ ORDERS : "ユーザーは複数の注文を行う"
    ORDERS ||--o{ ORDER_ITEMS : "注文は複数の商品アイテムを含む"
    PRODUCTS ||--o{ ORDER_ITEMS : "商品は複数の注文アイテムに掲載される"

一覧に戻る

構築一覧に戻る