数仓分层理论
数据仓库
在实际工作中,数仓分层、元数据管理、数据质量管理一直是一个持续优化的过程,我们公司业务也是在持续的做数仓的优化工作,在数据治理这方面还是欠缺很多的经验的。下面先简单整理了一下第一个理论部分的相关笔记。
一、数据仓库理论
(1)数据仓库四大特征
面向主题:较高层次上企业信息系统中的数据综合、归类并进行分析利用的抽象概念。
集成的:从不同数据库、数据文件和不同日志中抽取的,既有内部数据,又有外部数据
稳定的:主要是针对应用而言,数据一旦进入数仓之后,一般情况下保留较长时间,极少更新。
反映历史变化的:数仓包含各粒度的历史数据。数仓的数据也会做定期的更新,以适应决策需要。
(2)数据仓库作用
整合业务数据,建立统一的数据中心;
生成业务报表,了解企业的经营状况;
辅助决策管理提供数据支持
可以作为各个业务的数据源,形成业务数据互相反馈的良性循环;
分析用户行为数据,通过数据挖掘来降低投入成本,提高投入效果;
开发数据产品,直接或间接地为企业盈利
(3)数据仓库与数据库的比较
事务--是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;
事务的四大特性:
1 、原子性A:事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做
2 、一致性C:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
3 、隔离性I:一个事务的执行不能其它事务干扰。
4 、持续性D:也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。
数据库--OLTP(On-Line Transaction Processing 联机事务处理)
对少数记录查询、修改;
用户关心操作响应时间、数据安全性、完整性和并发性
主要用于操作型处理
数据仓库--OLAP(On-Line Analytical Processing 联机分析处理)
对某些主题的历史数据分析、支持管理决策。
(4)数据仓库和数据库对比:
数仓用于解决企业级数据分析问题、管理和决策。
数仓为分析数据而设计;数据库为捕获和存储数据设计
数仓面向分析,面向主题设计的;数据库是面向事务设计的,属于操作型。
数仓采用反范式设计(引入数据冗余来提高查询效率);数据库设计尽量避免冗余,一般采用符合范式规则设计。
数仓较大,且数据来源于多个异构数据源,保留历史数据;数据库存储有限期限,单一领域业务数据。
数仓面向主题设计;数据库面向事务设计;
(5)数据集市
数据仓库的某一部分,是按照部门或业务分部建立的反映各个子主题的局部性数据组织,也可以称为部门数据仓库。
eg商品销售中的数据仓库建立不同主题的数据集市:
商品采购数据集市
商品库存数据集市
商品销售数据集市
二、数据仓库建模方法
1、ER模型(Entity Relationship)--在范式理论上符合3NF模型
3NF范式:
1NF:原子数据,不可再分割
2NF:非主键必须完全依赖联合主键,不可部分依赖
3NF:非主键不可依赖另外的非主键
建立ER模型需要全面了解整个企业业务和数据
实施周期非常长
对建模人员的能力要求非常高
ER模型建设数仓是为整合数据,将各系统中数据以企业角度主题进行相似性组合和合并,并进行一致性处理,不能用于分析决策。
建模步骤:
高层模型
中层模型
物理模型
2、维度模型
为分析需求服务,快速完成分析,并具有较好的大规模复杂查询的响应性能
星型模型
雪花模型
维度模型设计步骤:
1.选择需进行分析决策的业务过程
2.选择数据的粒度
3.识别维度表,包括维度属性,用于分析时进行分组和筛选。
4.选择事实,确定分析需要衡量的指标
三、数据仓库分层
数据仓库是指一整套的数据建模、ETL(数据抽取、转换、加载)、作业调度等在内的完整理论体系流程。
(1)数仓分层原因:
清晰的数据结构
将复杂的问题简单化
减少重复开发
屏蔽原始数据的异常
数据血缘关系追踪
(2)常见数据分层为3层:
数据操作层(ODS):离线或准实时数据接入(包括:业务数据、日志数据、第三方数据)
数据仓库层(DW):
DIM公共维度层
TMP临时层
DWD层:数据明细层。对ODS层数据做一定的数据清洗和转换。
DWS层:数据服务层。对DWD层数据做轻度汇总,得到业务汇总表或宽表。
数据应用层(ADS,数据集市层):DM。汇总得到业务相关指标或数据。
正常情况下会根据业务或者开发人员经验划分为不同的层。
(3)数据分层逻辑
1、ODS(Operation Data Store 数据准备区):最原始的数据,即是最处接收的业务日志数据或者异构数据。
ODS来源包括:
业务数据库,使用DataX,Sqoop等工具抽取;
实时应用中,使用Canal监听Mysql的Binlog,实时接入变更的数据。
埋点日志:key使用Flume定时抽取。
其他数据源:第三方购买数据或网络爬虫数据。
2、DW(Data Warehouse 数据仓库层):包括DWD,DWS,DIM层;由ODS层数据加工而成。
DWD(Data Warehouse Detail 细节数据层):是业务层与数据仓库的隔离层。构建细粒度的明细层事实表。也可将明细事实表的某些重要维度属性字段做适当冗余,也即宽表化处理;
DWS (Data Warehouse Service 服务数据层):基于DWD的基础数据,整合汇总成分析某一个主题域的服务数据。
DIM(公共维度层):基于维度建模理念思想,建立一致性维度;
TMP(临时层):存放计算过程中临时产生的数据;
3、ADS (Application Data Store 应用数据层):基于DW数据,整合汇总成主题域的服务数据,用于业务查询等。
注:异构数据顾名思义就是不同结构的数据,异构数据体现在五个层次上:
1.计算机体系结构的异构;数据的物理存储来源于不同体系结构的计算机中,如:大型机、小型机、工作站、PC或嵌入式系统中。
2.操作系统的异构;数据的存储来源于不同的操作系统,如:Unix、Windows、Linux、OS/400等。
3.数据格式的异构;数据的存储管理机制不同,可以是关系型数据库系统,如:Oracle、SQL Server、DB2等,也可以是文件行二维数据,如:txt、CSV、XLS等。
4.数据存储地点异构;数据存储在分散的物理位置上,此类情况大多出现在大型机构中,如:销售数据分别存储在北京、上海、日本、韩国等多个分支机构的本地销售系统中。
5.数据存储的逻辑模型异构;数据分别在不同的业务逻辑中存储和维护,从而相同意义的数据存在表现的异构;如:独立的销售系统和独立的采购系统中存在部门的编码不一致等。
注:Sqoop是大数据工具组件,用于从数据库抽数据到数据仓库。
注:Flume是大数据工具组件,
注:宽表。即将不同业务主题相关的指标、维度、属性关联在一起,生成一张关联关系表,供业务人员使用。解决多维分析时多表的关联问题又能提高数据查询的速度和分析操作的便捷性。
缺点:由于把不同的内容都放在同一张表存储,宽表已经不符合三范式的模型设计规范。随之带来的主要坏处就是数据的大量冗余,与之相对应的好处就是查询性能的提高与便捷。
优点:这种宽表的设计广泛应用于数据挖掘模型训练前的数据准备,通过把相关字段放在同一张表中,可以大大提高数据挖掘模型训练过程中迭代计算时的效率问题。
(一句话,空间换时间,便于训练迭代、减少表关联数量,修改少量数据时不需要该多张表)
窄表:严格按照数据库设计三范式。尽量减少数据冗余,但是缺点是修改一个数据可能需要修改多张表。
案例:https://www.cnblogs.com/zoutong/p/13497545.html
Q1:宽表和窄表的建设该如何选择?
Q2:考虑这样的一个问题,一个公司有这样的一个需求:设计销售领域的订单事实表,该事实表应该包含哪些维度和度量?事实表和维表该分别如何去设计?
注:冗余数据。数据冗余发生在数据库系统中,指的是一个字段在多个表里重复出现。
举个例子,如果每条客户购买商品的信息里都连带记录了客户自身的信息,这样的数据冗余可能造成不一致,因为客户自身的信息可能不一样。
数据冗余会导致数据异常和损坏,一般来说设计上应该被避免。
数据库规范化防止了冗余而且不浪费存储容量。
适当的使用外键可以使得数据冗余和异常降到最低。
但是,如果考虑效率和便利,有时候也会设计冗余数据,而不考虑数据被破坏的风险。