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 : "商品は複数の注文アイテムに掲載される"