選對建模方法

Snowflake 資料建模入門

Nuno Rocha

Director of Engineering

各種建模技術的應用場景

實體關聯(ER)模型的應用場景

Snowflake 資料建模入門

各種建模技術的應用場景(1)

維度模型的應用場景

Snowflake 資料建模入門

各種建模技術的應用場景(2)

Data Vault 模型的應用場景

Snowflake 資料建模入門

技術考量

ER 模型的優缺點

Snowflake 資料建模入門

技術考量(1)

維度模型的優缺點

Snowflake 資料建模入門

技術考量(2)

Data Vault 的優缺點

Snowflake 資料建模入門

資料模型實戰

維恩圖中的模型

Snowflake 資料建模入門

資料模型實戰(1)

大學資料在維恩圖中的模型

Snowflake 資料建模入門

從模型擷取資料

  • 透過參照 hub 實體與其 satellite 來擷取學生的詳細資料:
SELECT
    hs.student_key,
    ss.student_name
FROM hub_students AS hs
    JOIN sat_student AS ss ON hs.student_key = ss.student_key;
Snowflake 資料建模入門

從模型擷取資料(1)

  • LEFT JOIN ON:SQL 子句,根據鍵在 ON 條件下,保留左側實體的所有列,並合併右表中相符的列。
SELECT
    hs.student_key,
    ss.student_name
FROM hub_students AS hs
    JOIN sat_student AS ss ON hs.student_key = ss.student_key
    LEFT JOIN link_enrollment AS le ON hs.student_key = le.student_key
Snowflake 資料建模入門

從模型擷取資料(2)

  • COUNT:SQL 聚合函式,回傳群組中的項目數量。
  • GROUP BY:SQL 子句,將具有相同值的資料彙總。
SELECT
    hs.student_key,
    ss.student_name,
    COUNT(le.class_key) AS NumberOfEnrollments
FROM hub_students AS hs
    JOIN sat_student AS ss ON hs.student_key = ss.student_key
    LEFT JOIN link_enrollment AS le ON hs.student_key = le.student_key
GROUP BY hs.student_key, 
    ss.student_name
Snowflake 資料建模入門

從模型擷取資料(3)

  • MAX:SQL 聚合函式,找出某屬性的一組值中的最大值。
SELECT
    hs.student_key,
    ss.student_name,
    COUNT(le.class_key) AS NumberOfEnrollments
    MAX(sc.load_date) AS MostRecentEnrollmentDate
FROM hub_students hs
    JOIN sat_student ss ON hs.student_key = ss.student_key
    LEFT JOIN link_enrollment le ON hs.student_key = le.student_key
    LEFT JOIN sat_class sc ON le.class_key = sc.class_key
GROUP BY hs.student_key, 
    ss.student_name;
Snowflake 資料建模入門

函式總覽

  • SELECT FROM:SQL 指令,用於擷取實體中的欄位。
  • JOIN ON:SQL 子句,依相關屬性合併實體的列。
  • LEFT JOIN ON:SQL 子句,根據鍵在 ON 條件下,保留左側實體的所有列,並合併右表相符列;若無相符,結果仍顯示左側列,右側屬性為空值。
  • COUNT:SQL 聚合函式,回傳群組中的項目數量。
  • MAX:SQL 聚合函式,找出屬性的最大值。
  • GROUP BY:SQL 子句,將具有相同值的資料彙總。
Snowflake 資料建模入門

函式總覽

SELECT column_name, 
    COUNT(another_column) AS alias_name,
    MAX(other_column) AS alias_name
FROM table_name table_alias
    -- 依鍵合併實體
    JOIN other_table AS other_alias 
    ON table_alias.FK = other_alias.PK
    LEFT JOIN another_table AS another_alias 
    ON table_alias.FK = other_alias.PK
-- 依特定欄位彙總資料
GROUP BY column_name;
Snowflake 資料建模入門

一起來練習吧!

Snowflake 資料建模入門

Preparing Video For Download...