当前位置: 代码迷 >> 综合 >> 数仓的基本知识及概念
  详细解决方案

数仓的基本知识及概念

热度:93   发布时间:2024-02-01 02:42:00.0

什么叫数据仓库?

四特点:面向主题,集成的,相对稳定,保留历史

 

数据仓库和数据库有什么区别?

事务性数据:业务系统,交易流水,登录日志

决策性数据:主要用于查询分析

 

什么叫维度和度量?

维度是离散型,统计中的分类数据,区域城市

度量是连续型,温度余额

 

三范式理解

范式化 (时间换空间) VS 反范式化(空间换时间)

1NF要求属性具有原子性,即列不可再分解

如学生(学号,姓名,性别,出生年月日)

有些钢筋可能要问了,姓名可以拆成姓、名两列, “出生年月日” 也可以拆成年、月、日三个字段。所以就不满足第一范式了!!!这里再强调一下原子性,原子性是根据使用方便来自定义的最小单位。中国人一般姓名一起用,美国就习惯姓名分别存两字段

 

2NF要求记录有惟一标识,即不存在部分依赖;

表:学号、课程号、姓名、学分;

这个表明显说明了两个事务:学生信息, 课程信息;由于非主键字段必须依赖主键,这里学分依赖课程号,姓名依赖与学号,所以不符合二范式。

正确做法: 

学生:Student(学号, 姓名); 

课程:Course(课程号, 学分); 

选课关系:StudentCourse(学号, 课程号, 成绩)。

 

3NF是对字段的冗余性,要求任何字段不能由其他字段派生出来,它要求字段没有冗余,即不存在传递依赖

表: 学号, 姓名, 年龄, 学院名称, 学院电话

因为存在依赖传递: (学号) → (学生)→(所在学院) → (学院电话) 。

正确做法:

学生:(学号, 姓名, 年龄, 所在学院);

学院:(学院, 电话)。

 

数仓分层设计

贴源层:

将各个源系统的业务数据加载成结构化数据,基本不对数据内容做任何处理

清洗层:

对贴源层数据做脱敏,去重,加密,异常值处理,字段名,日期格式,金额单位等规范化,增量数据merge

中间明细层:

对相同粒度的不同明细数据合并,或者轻度汇总,建立后续分析用的公共明细表,在这一步中不一定坚持三范式原则,可能会反范式增加冗余。

数据集市:

按照各种维度或者多个组合维度汇总,一般都是一些大宽表,根据业务主题划分,集市这块可能又会拆分为汇总指标和标签,指标类似某某时间段的交易总额,某某时间段的pv,uv总之是一个周期内的度量。标签一般就定义为类似码值,枚举,极值等

应用层:

一般就认为是接口,按照业务特定需求制定的报表,可复用性低

元数据:

一般区分为业务元数据和技术元数据

业务元数据:字段码值

技术元数据:表结构信息,血缘依赖

管理元数据:人员角色、岗位职责、管理流程等信息

安全元数据:安全、权限控制、分级管理、隐私控制、流程约束