tonglin0325的个人主页

数据仓库建模的一些理论

1.数据分层#

数据明细层:DWD(Data Warehouse Detail)

数据中间层:DWM(Data WareHouse Middle)

数据服务层:DWS(Data WareHouse Servce)

数据应用层:ADS(Application Data Service)

2.数仓建模方法#

在数据仓库模型中,星型模型和雪花型模型是两个常用的设计模式。参考:数据仓库系列:星型模型和雪花型模型

1.星型模型#

星型模型是一种简单的数据仓库模型,也是最常见的模型之一。在星型模型中,中心表(称为业务事实表)连接到几个维度表(称为业务维度表)。维度表中包含了业务的各个特征,如时间、区域、产品等。

在 SQL 中,我们可以使用以下语句来创建一个星型模型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
CREATE TABLE fact_sales ( # 都是key
sales_id INT PRIMARY KEY,
date_key INT,
product_key INT,
store_key INT,
sales_amount DECIMAL(15,2)
);

CREATE TABLE dim_date (
date_key INT PRIMARY KEY,
date_full DATE,
year INT,
quarter INT,
month INT,
day_of_week CHAR(9),
holiday VARCHAR(32)
);

CREATE TABLE dim_product (
product_key INT PRIMARY KEY,
product_name VARCHAR(128),
category VARCHAR(32),
subcategory VARCHAR(32)
);

CREATE TABLE dim_store (
store_key INT PRIMARY KEY,
store_name VARCHAR(128),
city VARCHAR(32),
state VARCHAR(2),
country VARCHAR(64)
);

2.雪花型模型#

雪花型模型是在星型模型基础上的扩展,因其形似雪花而得名。这种模型在星型模型的基础上,将维度表拆分成更小的表形式,形成多层表的结构。

雪花型模型:当有一个或多个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上时,其图解就像多个雪花连接在一起,故称雪花模型。雪花模型是对星型模型的扩展。它对星型模型的维表进一步层次化,原有的各维表可能被扩展为小的事实表,形成一些局部的 “层次 “ 区域,这些被分解的表都连接到主维度表而不是事实表。

雪花型模型通过最大限度地减少数据存储量以及联合较小的维表来改善查询性能。雪花型结构去除了数据冗余。

星型模型对比雪花模型#

1、查询性能角度来看

在OLAP(Hive)建议用星型模型,Hive表通过大量的冗余来提升查询效率,星型模型对OLAP的分析引擎支持比较友好;而雪花型要做多个表联接,性能会低于星型架构

在OLTP(MySQL)建议用雪花模型,由于雪花型架构更有利于度量值的聚合,因此性能要高于星型架构,所以雪花模型在关系型数据库中如MySQL,Oracle中非常常见

2、模型复杂度角度

星型架构更简单方便处理

3、层次结构角度

雪花型架构更加贴近OLTP系统的结构,比较符合业务逻辑,层次比较清晰。

4、存储角度

雪花型架构具有关系数据模型的所有优点,不会产生冗余数据,而相比之下星型架构会产生数据冗余。

3.Data Vault 模型#

Data Vault 是另一种数据仓库建模方法,是 Dan Linstedt 在 20 世纪 90 年代提出的,主要用于企业级的数据仓库建模

Data Vault 模型由中心表(Hub)、链接表(Link)、附属表(Satellite)三个主要组成部分。其中,中心表是核心,用于存储业务主键,链接表记录业务关系,附属表记录业务描述。

(1)中心表

中心表用来存储企业每个业务实体的业务主键,业务主键唯一标识某个业务实体。中心表和源系统是相互独立的,即无论业务主键是否用于多个业务系统,它在 Data Vault 中只保留一份,其他的组件都链接到这一个业务主键上。

出于设计上的考虑,中心表一般由主键、业务主键、装载时间戳、数据来源系统四个字段组成。其中主键是系统生成的代理键,仅供内部使用。

(2)链接表

链接表是不同中心表的链接。一个链接表一般在两个或多个中心表之间有关联。一个链接表通常是一个外键,表示一种业务关系,比如:交易表、客户关联账户等。

链接表主要包括主键、外键1、……、外键n、装载时间戳、数据来源系统等字段构成,其中主键对应多个外键的唯一组合,一般是与业务无关的序列数值。

(3)附属表

附属表用来保存中心表和链接表的描述属性,包含所有历史变化数据,附属表有且仅有一个唯一外键关联到中心表或链接表。

附属表主要包括主键、外键、属性1、……、属性n、装载时间、失效时间、数据来源系统,主键用于唯一标识附属表中的一行记录,一般是与业务无关的序列数值。

参考:数据仓库进阶之路