維度建模

Snowflake 資料建模入門

Nuno Rocha

Director of Engineering

維度資料模型入門

  • 維度建模:一種資料結構化技術,將量測(事實)與描述性細節(維度)分離,以利報表與分析。

維度模型

Snowflake 資料建模入門

維度資料模型入門(1)

  • 維度(Dimensions):在維度模型中含有類別型資料的實體。
  • 事實(Facts):在各維度類別下,紀錄並量化活動的實體。

大學維度模型

Snowflake 資料建模入門

星型維度模型架構

星型維度模型

Snowflake 資料建模入門

星型維度模型架構

  • Snowflake Data Warehouse:雲端的儲存與分析服務。
  • Snowflake 架構:在維度模型中組織資料的方法,包含次維度。

Snowflake,資料倉儲 vs 維度模型

Snowflake 資料建模入門

雪花型維度模型架構

雪花型維度模型

Snowflake 資料建模入門

定義維度

  • 為清楚起見,將實體依模型中的維度更名為 dim_EntityName:
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 搭配,用於重新命名實體的 SQL 指令
  • JOIN ON:根據關聯欄位合併資料表列的 SQL 子句
  • WHERE:依條件篩選紀錄的 SQL 子句
  • 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...