次元データモデリング

Snowflakeで学ぶデータモデリング入門

Nuno Rocha

Director of Engineering

次元データモデルの概要

  • 次元データモデリング: 測定値(ファクト)と説明情報(次元)を分離し、レポート・分析に最適化する手法。

次元モデル

Snowflakeで学ぶデータモデリング入門

次元データモデルの概要 (1)

  • 次元: 次元モデルでカテゴリ型データを持つエンティティ。
  • ファクト: 次元のカテゴリ内の活動を記録・定量化するエンティティ。

大学の次元モデル

Snowflakeで学ぶデータモデリング入門

スター型次元スキーマ

スター型次元モデル

Snowflakeで学ぶデータモデリング入門

スター型次元スキーマ

  • Snowflake Data Warehouse: クラウド型のストレージ/分析サービス。
  • スノーフレーク・スキーマ: サブ次元を含む次元モデルの構造化手法。

Snowflake、データウェアハウス vs 次元モデル

Snowflakeで学ぶデータモデリング入門

スノーフレーク型次元スキーマ

スノーフレーク型次元モデル

Snowflakeで学ぶデータモデリング入門

次元の定義

  • 明確化のため、エンティティを dim_エンティティ名 にリネーム(次元を追従):
ALTER TABLE students RENAME TO dim_students;
ALTER TABLE classes RENAME TO dim_classes;
ALTER TABLE schools RENAME TO dim_schools;
Snowflakeで学ぶデータモデリング入門

日付次元の定義

  • 学生の在籍に関連する基準日を保持する dim_date テーブルを作成:
CREATE OR REPLACE TABLE dim_date (
    date_id NUMBER(10,0) PRIMARY KEY,
    year NUMBER(4,0),
    semester VARCHAR(255)
);
Snowflakeで学ぶデータモデリング入門

在籍ファクトの定義

  • すべての次元を参照するファクトエンティティを作成:
CREATE OR REPLACE TABLE fact_enrollments (
    enrollment_id NUMBER(10,0) PRIMARY KEY,
    student_id NUMBER(10,0),
    class_id NUMBER(10,0),
    date_id NUMBER(10,0),
    FOREIGN KEY (student_id) REFERENCES dim_students(student_id),
    FOREIGN KEY (class_id) REFERENCES dim_classes(class_id),
    FOREIGN KEY (date_id) REFERENCES dim_date(date_id)
);
Snowflakeで学ぶデータモデリング入門

次元からのデータ取得

大学の次元データモデル

Snowflakeで学ぶデータモデリング入門

次元からのデータ取得 (1)

SELECT name, 
    class_name
FROM fact_enrollments
    JOIN dim_students -- 学生名取得のために結合
    ON fact_enrollments.student_id = dim_students.student_id
    JOIN dim_classes -- 授業名取得のために結合
    ON fact_enrollments.class_id = dim_classes.class_id
    JOIN dim_schools -- 'Science' 学部でフィルタするために結合
    ON dim_classes.school_id = dim_schools.school_id
    JOIN dim_date -- 2023年に制限するために結合
    ON fact_enrollments.date_id = dim_date.date_id
WHERE dim_schools.school_name = 'Science' 
    AND dim_date.year = 2023;
Snowflakeで学ぶデータモデリング入門

用語と機能の概要

  • 次元データモデリング: 測定値(ファクト)と説明情報(次元)を分離し、レポート/分析に最適化
  • 次元: 次元モデルでカテゴリ型データを持つエンティティ
  • ファクト: 次元のカテゴリ内の活動を記録・定量化するエンティティ
  • ALTER TABLE: 既存エンティティの構造を変更するSQLコマンド
  • RENAME TO: ALTER TABLEで使用、エンティティ名を変更
  • JOIN ON: 関連列に基づき表を結合
  • WHERE: 条件でレコードを絞り込み
  • AND: WHERE条件を複合化する論理演算子
Snowflakeで学ぶデータモデリング入門

機能の概要

-- エンティティを変更
ALTER TABLE table_name 
RENAME TO new_name;
-- 条件でフィルタした結合結果を取得
SELECT 
    table_name.column_name,
    other_name.*
FROM table_name
    JOIN other_table 
    ON table_name.FK = other_table.PK
WHERE column_name  condition  value
    AND column_name  condition  value;
Snowflakeで学ぶデータモデリング入門

練習しましょう!

Snowflakeで学ぶデータモデリング入門

Preparing Video For Download...