维度建模

Snowflake 中的数据建模入门

Nuno Rocha

Director of Engineering

维度数据模型简介

  • 维度建模:一种数据结构化方法,将度量(事实)与描述性细节(维度)分离,便于报表与分析。

维度模型

Snowflake 中的数据建模入门

维度数据模型简介(1)

  • 维度(Dimensions):维度模型中含分类数据的实体。
  • 事实(Facts):在维度类别中捕获并量化活动的实体。

高校维度模型

Snowflake 中的数据建模入门

星型维度模型模式

星型维度模型

Snowflake 中的数据建模入门

星型维度模型模式

  • Snowflake 数据仓库:基于云的存储与分析服务。
  • 雪花模式(Snowflake Schema):包含子维度的维度模型组织方法。

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 中的数据建模入门

术语与函数概览

  • 维度建模:将度量(事实)与描述性细节(维度)分离的数据结构化方法,优化用于报表与分析
  • 维度(Dimensions):维度模型中含分类数据的实体
  • 事实(Facts):在维度类别中捕获并量化活动的实体
  • 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...