本篇文章,我们来谈谈数据仓库,我们从以下几个点来阐述数据仓库
- 什么是企业数据仓库?
- 企业数据仓库建设方法以及优缺点
- 企业数据仓库的规范
- 企业数据仓库的数据建模方法
- 范式建模和维度建模
- 数据仓库存在的痛点
- 企业数据仓库的管理
- 未来发展趋势
1.什么是企业数据仓库?
数据仓库是一个集成的面向主题的数据集合,设计的目的是支持DSS(决策支持系统)的功能,在数据仓库里,每个数据单元都和特定的时间相关。数据仓库包括原子级别的数据和轻度汇总的数据。数据仓库是面向主题的、集成的、不可更新的(稳定性)、随时间不断变化(不同时间)的数据集合,用以支持经营管理中的决策制定过程。不能将数据仓库简单地理解成一套软件,数据仓库是重建企业数据流和信息流的过程,在这个过程中,构造企业的决策支持环境,以区别原来的业务系统所构建的操作型环境。数据仓库的价值并不是你在仓库中所存储的数据量的多少,而关键在于从仓库中能够获得的信息和分析结果的质量。
2.企业数据仓库建设方法以及优缺点
2.1 数据仓的建设方法
数据仓库的建设方法采用分层的方式,如下图:
- ODS 数据接入层
数据同步,基本保持与源数据格式一致,不进行过多的校验
- DIM维表层
一致性维度建设
- DWD明细数据层
标准化,异常处理
- DWS轻度汇总层
单业务场景,行为数据组装,提炼公共数据的指标,增加复用性
- DWM数据集市层
宽表集市,跨业务场景,行为数据组装
- APP数据应用层
个性化指标加工,基于应用的数据组装
下面是分层调用的图:
3.企业数据仓库的规范
- 表命名规范
(数据仓库分层,ods,dwd,dws,app)_(业务)_(数据域)_(业务描述)_(时间周期)
具体入下图:
举例说明:
如下表名:dwd_order_trade_detail_day (订单交易明细天表)
dwd_order_trade_detail_month (订单交易明细月表)
- 字段命名规范
1.属性字段:文本字段,使用通用单词即可
2.指标字段:修饰词+原子词+时间
4.计数字段:<计数主体>_cnt
5.比例字段:<比例主体>_rate
6. 分区字段:日/周/月/季度/年:ds,小时:hh ,分钟:mm,业务分区:业务描述文本
7.费用字段:<费用主体>_amt
8.标识字段:is_<标识主体>
9.时间字段:<业务主体>_time
10.日期字段:<业务主体>_date
- 数据开发规范
1. 指定库和队列:声明使用的库,指定本账号所属的队列
2.表创建:外部表,ORC,分割,Location指定
3.分区加载:删除分区,加载分区,指定分区Location
4.UDF/临时表创建
5.数据写入:通过覆盖的方式写入
6.临时表删除
4.企业数据仓库的数据建模方法
数据仓库建模主要遵循以下:
- 概念模型
概念模型主要是通过分析和归纳,将业务划分成几个主题,并确定主题之间的关系
比如:
电影行业:影院,影片 ,影人,用户,订单,渠道,发行等
出行行业:司机,乘客,订单,支付,车辆等
- 逻辑模型
逻辑模型是指在概念模型的基础上,定义数据仓库的各种实体,属性,关系,指导后续的数据存储,组织和数据应用的开发,目前比较流行的建模理论为inmon提出的自下而上的范式建模理论和Kimball的从上而下的维度建模理论
范式建模:
1. 第一范式(INF):原子性,数据不可分割
2.第二范式(2NF):唯一性,每一行数据都具备唯一性
3.第三范式(3NF):独立性,消除传递依赖
维度建模:
1. 星型:
由一个事实表和一组维表组成,每个维表都有一个维度作为主键,事实表居中,多个维表呈辐射状分布其四周,
并与事实表连接。形成一个星型结构
2.雪花型:
在星型模型基础上,基于范式理论进一步层次化,将某些维表扩展成事实表,最终形成雪花状结构
- 物理模型
物理模型设计是根据逻辑模型设计的结构为基础,设计数据对象的物理实现,比如表的命名规范,字段的命名规范,字段的类型选择,分区设置,存储设置,更新方式等等
5.范式建模和维度建模
- 范式建模
由Inmon所倡导,主要利用关系型数据库进行数据仓库的建设,且模型的建设方法和业务系统的数据模型比较类似
一个符合第三范式的关系必须具有以下三个条件:
a. 1NF:每个属性值唯一,不具有多义性;
b.2NF:每个非空主属性必须完全依赖于整个主键,而非主键的一部分
c:3NF:每个非主属性不能依赖于其他关系中的属性
优点:
节约存储,结构清晰,易于理解,适合关系型数据库
缺点:
构建比较繁琐
查询复杂
不适合构建在大数据分布式环境下
虽然有这些缺点,但是范式建模的理论,任然是需要我们去熟练掌握,原因有如下几点:
数据仓库上游有相当一部分数据源是业务数据库,这些业务数据库,其理论一般都是基于范式理论;
数据源的规范定义需要我们了解范式理论
数据仓库下游系统比如报表系统设计时,可能会用到范式理论
- 维度建模
由于范式建模存在的问题,Kimball 提出了维度建模理论,即数据可以抽象成事实和维度,维度为客观事物的角度,事实为对应某粒度下的度量值,一般维度建模的步骤如下:
1. 选择业务过程
业务过程是一系列操作活动,转换为事实表中的事实,例如每个月的每个账单快照
2. 声明粒度
粒度是指事实表中的一行代表什么,同一个事实表不能混用粒度,最好从最小的粒度开始设计维度,因其可能承受用户无法预计的查询需求
3.确认维度
维度是根据粒度将表分开成多个维度表,即从不同的维度(角度)去看
维度是数据仓库的灵魂,是BI的入口和驱动
4.确认事实
事实是指一种在某个粒度下的度量,例如在销售维度中,销量和总额是良好的事实,而商店经理的工资则不允许出现在该维度中。
优点:
方便使用
适合大数据下的数据处理场景(与大数据的处理方式有关,适合处理大文件,不适合处理小文件,避免多表关联)
适合进行OLAP操作
缺点:
维度补全造成的数据存储的浪费
维度变化造成的数据更新量大
与范式理论差异很大,是典型的反三范式
6.企业数据仓库的管理
- 调度系统
1. Azkaban
2.airflow
3.DolphinScheduler
4.Oozie
- 元数据管理(数据地图)
元数据管理包括如下信息:
序号 | 名称 | 说明 |
---|---|---|
1 | 表信息 | 包括表英文名,中文注释,表状态,表类型(外部,内部),等 |
2 | 字段信息 | 包括字段类型,英文名,中文名,字段注释,安全等级,统计逻辑说明 |
3 | 负责人信息 | 业务/开发负责人名称,所在部门,以及联系方式 |
4 | 分区信息 | 分区名,分区大小,分区记录条数,生成分区的时间 |
5 | 血缘关系 | 表的上游,下游 |
6 | 代码信息 | 生成该表对应的代码 |
7 | 存储信息 | 数据存储的位置,格式, |
8 | 热度信息 | 数据的使用热度 |
9 | 权限信息 | 表的权限,字段的权限 |
10 | 使用注意事项 | 使用规范 |
- 权限管理
数据权限管理,资源权限管理(存储,集群计算资源)
- 血缘分析
表上下游依赖分析,任务执行流程,是数据质量监控的重要部分等
- 指标管理
包括指标解析,指标录入,指标申请,指标说明等,指标管理是实现数据指标,计算口径统一的重要策略
- 数据质量监控
数据质量监控主要基于规则判断达到数据监控的目的,系统建设一般分为三个阶段
1.表级别的监控:主要为表的总条数,总大小,分区数据,各分区条数,各分区大小,
条数/大小同行比,日增长情况等
2.字段级别的数据监控:枚举值异常判断,特殊值判断,范围判断等
3.全链路数据监控:主要依赖于上下游血缘分析,自动判断跟踪故障点,并及时告知相关负责人
其中,表级别和字段级别的监控是比较常规且易实现的监控方式,
全链路数据监控比这两者要复杂
很多,涉及到从源数据-》数据通道-》数据ETL-》数据展示的全过程
- 通用的离线和实时计算平台
7.数据仓库存在的痛点
- 临时取数的需求占用数仓人员大部分数据
- 自主取数+OLAP系统(自助查询平台)
- 数仓规范和流程不一致,跨部门合作困难
- 建模规范和开发规范(数据开发平台)
- 指标口径不一致导致数据可信度下降
- 指标字典
- 烟筒式开发形成数据孤岛与重复计算
- 指标字典
- 建模规范和开发规范
- 数据膨胀导致数据计算资源紧张,出数时间得不到保障
- 指标字典
- 建模规范和开发规范
- 数据产品和服务话
- 异常排查时间和修复时间长
- 元数据与数据质量监控
- 数据安全和数据共享矛盾不可调和
- 数据分级和权限管理
- 产出形式单一
- 数据产品和服务化
- 业务需求响应不及时
- 自助查询平台
- 数据产品和服务
7.未来发展趋势
1. 数据产品化
面向管理层的宏观经营分析系统(报表,邮件,BI);
面向运营人员的业务监控报表系统
2.数据服务化
数据服务管理平台(http,grpc)
数据运营平台
3. 数据资产化(数据银行)