第十二周 综合项目:电商数据仓库之用户数据行为数仓
电商数据仓库效果展示
1 | 大家好,下面我们来学习一个电商行业的数据仓库项目 |

项目的由来
1 | 接下来我们来看一下这个项目的由来,我们为什么要做这个数据仓库项目呢?或者说做这个数据仓库项目有什么意义吗? |
1 | 如果想要按照天来汇总每天用户的消费总金额,这种数据指标对数据的实时性没什么要求,但是对数据的准确度有很高要求,所以一般会使用数据库中的数据,因为数据库是有事务的,并且在统计的时候也可以排除掉用户退款的数据,这样统计出来的才是这一天用户真正的消费总金额。 |
数据仓库前置技术
什么是数据仓库
1 | 咱们前面说了要构建一个数据仓库,那严格意义上来说,到底什么是数据仓库呢? |
1 | 来看一下针对数据仓库的官方解释: |
1 | 注意它里面的这几个特性: |
1 | 企业数据仓库的建设,是以现有企业业务系统和大量业务数据的积累为基础。数据仓库不是静态的概念,只有把信息及时交给需要这些信息的使用者,供他们做出改善其业务经营的决策,信息才能发挥作用,信息才有意义。而把信息加以整理归纳和重组,并及时提供给相应的管理决策人员,是数据仓库的根本任务。 |
数据仓库基础知识
1 | 在学习数据仓库之前我们先来看一些数据仓库的基础知识 |
事实表、维度表
1 | 首先我们来看两个名词:事实表和维度表 |

1 | 什么是维度表呢? |

1 | 这是事实表和维度表的特点,大家最起码要能区分出来一个表是事实表还是维度表,否则在工作中别人提到这两个概念你还是一脸懵,那就尴尬了。 |
数据库三范式
1 | 接下来我们需要复习一下数据库中的三范式的特性,不知道大家还有没有印象,这个属于数据库相关的知识,如果大家系统的学习过类似于MySQL之类的关系型数据库的话,这块应该是有一些印象的。 |
第一范式(1NF)
1 | 它的意思是说数据库表的每一列都是不可分割的原子数据项 |

1 | 所以针对这个字段进行拆分,让这个表满足第一范式 |

第二范式(2NF)
1 | 第二范式(2NF)表示在1NF的基础上,数据库表中每一列都和主键相关,不能只和主键的某一部分相关(针对联合主键而言) |

1 | 这个表里面除了存储的有学生的班级信息,还有学生的考试成绩信息 |

第三范式(3NF)
1 | 注意:满足第三范式(3NF)必须先满足第二范式(2NF)。 |

1 | 这样就满足数据库的第三范式了。 |
数据仓库建模方式
ER实体模型
1 | 数据仓库建模可以使用多种方式 |
维度建模模型
1 | Ralph Kimball提出的数仓理论中,提出了维度建模,将数据仓库中的表划分为事实表和维度表。 |
Data Vault模型
1 | Data Vault是在ER模型的基础上衍生而来,模型设计的初衷是有效的组织基础数据层,使之易扩展、灵活的应对业务的变化,同时强调历史性、可追溯性和原子性,不要求对数据进行过度的一致性处理;并非针对分析场景所设计。 |
Anchor模型
1 | Anchor是对Data Vault模型做了更近一步的规范化处理,初衷是为了设计高度可扩展的模型,核心思想是所有的扩张只添加而不修改,于是设计出的模型基本变成了k-v结构的模型。 |
维度建模模型
1 | 下面详细分析一下维度建模模型 |
星型模型

1 | 这里面的中间的订单表是事实表,外面的四个是维度表。 |
雪花模型
1 | 接下来看一下雪花模型 |

1 | 这个里面订单表是一个事实表,其余的都是维度表。 |
星型模型 VS 雪花模型
1 | 冗余:雪花模型符合业务逻辑设计,采用3NF设计,有效降低数据冗余;星型模型的维度表设计不符合3NF,反规范化,维度表之间不会直接相关,牺牲部分存储空间 |
1 | 那我们在实际工作中一般会选择哪种呢? |
数据仓库分层
为什么要分层
1 | 数据仓库在构建过程中通常都需要进行分层处理。业务不同,分层的技术处理手段也不同。对数据进行分层的一个主要原因就是希望在管理数据的时候,能对数据有一个更加清晰的掌控 |
数据仓库分层设计
1 | 那针对我们这里的数据仓库该如何分层呢? |

1 | 数据仓库一般会分为4层 |
1 | 注意:针对DWD层在对数据进行清洗的时候,一般需要遵循以下原则 |
数据仓库命名规范
1 | 我们在使用Hive实现数据仓库的时候该如何体现这些层次? |
典型的数据仓库系统架构
1 | 下图是一个典型的企业数据仓库系统,通常包含数据源、数据存储与管理、数据的访问三个部分 |

1 | 数据源部分负责采集各种日志数据、业务数据,以及一些文档资料,将我们需要的这些数据加载到Hive中,构建数据仓库 |
项目需求分析
1 | 通过刚才对一个典型的企业数据仓库系统架构进行分析,我们发现,想要开发一个完整的数据仓库系统,至少需要以下这几个功能模块 |