什么叫数据仓库?
四特点:面向主题,集成的,相对稳定,保留历史
数据仓库和数据库有什么区别?
事务性数据:业务系统,交易流水,登录日志
决策性数据:主要用于查询分析
什么叫维度和度量?
维度是离散型,统计中的分类数据,区域城市
度量是连续型,温度余额
三范式理解
范式化 (时间换空间) VS 反范式化(空间换时间)
1NF要求属性具有原子性,即列不可再分解
如学生(学号,姓名,性别,出生年月日)
有些钢筋可能要问了,姓名可以拆成姓、名两列, “出生年月日” 也可以拆成年、月、日三个字段。所以就不满足第一范式了!!!这里再强调一下原子性,原子性是根据使用方便来自定义的最小单位。中国人一般姓名一起用,美国就习惯姓名分别存两字段
2NF要求记录有惟一标识,即不存在部分依赖;
表:学号、课程号、姓名、学分;
这个表明显说明了两个事务:学生信息, 课程信息;由于非主键字段必须依赖主键,这里学分依赖课程号,姓名依赖与学号,所以不符合二范式。
正确做法:
学生:Student(学号, 姓名);
课程:Course(课程号, 学分);
选课关系:StudentCourse(学号, 课程号, 成绩)。
3NF是对字段的冗余性,要求任何字段不能由其他字段派生出来,它要求字段没有冗余,即不存在传递依赖
表: 学号, 姓名, 年龄, 学院名称, 学院电话
因为存在依赖传递: (学号) → (学生)→(所在学院) → (学院电话) 。
正确做法:
学生:(学号, 姓名, 年龄, 所在学院);
学院:(学院, 电话)。
数仓分层设计
贴源层:
将各个源系统的业务数据加载成结构化数据,基本不对数据内容做任何处理
清洗层:
对贴源层数据做脱敏,去重,加密,异常值处理,字段名,日期格式,金额单位等规范化,增量数据merge
中间明细层:
对相同粒度的不同明细数据合并,或者轻度汇总,建立后续分析用的公共明细表,在这一步中不一定坚持三范式原则,可能会反范式增加冗余。
数据集市:
按照各种维度或者多个组合维度汇总,一般都是一些大宽表,根据业务主题划分,集市这块可能又会拆分为汇总指标和标签,指标类似某某时间段的交易总额,某某时间段的pv,uv总之是一个周期内的度量。标签一般就定义为类似码值,枚举,极值等
应用层:
一般就认为是接口,按照业务特定需求制定的报表,可复用性低
元数据:
一般区分为业务元数据和技术元数据
业务元数据:字段码值
技术元数据:表结构信息,血缘依赖
管理元数据:人员角色、岗位职责、管理流程等信息
安全元数据:安全、权限控制、分级管理、隐私控制、流程约束