1、数仓基础
(1)什么是数仓。
通俗的说,就是存放着大量数据的地方,它英文名称为Data Warehouse,可简写为DW。数仓最常见的组件是hive,clickhouse。
(2)用来做什么
大量的数据放在一起,有利于中寻找有用的信息,主要是用来做三方面的事情:
- 了解现状:掌握占比、同比、环比等重要指标
- 辅助决策:这里举个例子,上世纪90年代,沃尔玛引入算法后发现尿布与啤酒的关联度极高,市场调研发现是太太们叮嘱丈夫下班后为小孩买尿布,顺手就会带上啤酒
- 预测走势:通过数据的分析,判断业务未来的变化
(3)为什么用数仓做而不是关系型数据库
如果没有数仓,报表、分析系统的数据可能就需要从OLTP的库中来,这样做有以下缺点:
- 性能问题,OLAP业务往往会涉及到大量的数据,这会影响OLTP应用sql的性能
- 数据格式的不统一,例如金额单位,时间单位
- 业务系统变更频繁,数据库字段变更速度较快
- 安全问题
- 误用业务数据
(4)数仓的特征
- 集成(核心特征)通常OLTP应用的数据都是比较分散的,数仓则会把这些数据集中到一起,有两个目的,一是要统一所有的数据的矛盾之处,二是要进行数据综合和计算
- 面向主题(核心特征)网上乱七八糟概念太多,用人话解释,就是看问题的维度
- 非易失性 一是指数据一般会被保留很久时间,二是指通常都是查看操作,很少有删除和修改这类操作
- 时变性 指数据是按照时间顺序追加的,它们都带有时间属性
(5)数仓和数据库的区别
本质上还是OLAP和OLTP的区别。
OLTP:On-Line Transaction Processing,面向事务的处理系统,指系统的关注点主要集中在:响应时间、数据的安全性、完整性和并发支持的用户数等问题,主要使用传统的数据库系统作为数据管理的主要手段,主要用于操作型处理,像Mysql,Oracle等关系型数据库一般属于OLTP。
OLAP:On-Line Analytical Processing,面向分析的处理系统,一般针对某些主题的历史数据进行分析,支持管理决策。
冗余设计 | 针对数据的主要操作 | 数据规模 | 延迟 | 事务 | |
数仓 | 刻意冗余 | 分析 | 大 | 高 | 不支持 |
数据库 | 避免冗余 | 捕获 | 小 | 低 | 支持 |
2、数仓架构
- ODS(数据源层Operational Data Store)ODS 层,是最接近数据源中数据的一层,为了考虑后续可能需要追溯数据问题,因此对于这一层就不建议做过多的数据清洗工作,原封不动地接入原始数据即可,至于数据的去噪、去重、异常值处理等过程可以放在后面的 DWD 层来做
- DW(数据仓库层Data Warehouse)
1)DWD (数据明细层Data WareHouse Detail)
一般保持和 ODS 层一样的数据粒度,并且提供一定的数据质量保证。DWD 层要做的就是将数据清理、整合、规范化、脏数据、垃圾数据、规范不一致的、状态定义不一致的、命名不规范的数据都会被处理同时,为了提高数据明细层的易用性,该层会采用一些维度退化手法,将维度退化至事实表中,减少事实表和维表的关联。
另外,在该层也会做一部分的数据聚合,将相同主题的数据汇集到一张表中,提高数据的可用性。
其实上面的话,总结成一句人话,就是对此层会对数据做一个初步的处理,包括清洗,整理以及聚合之类的操作。
2)DWM(数据中间层Data WareHouse Middle)
基于 DWD 层上的基础数据,整合汇总成分析某一个主题域的服务数据,一般是宽表。DWS 层应覆盖 80% 的应用场景。又称数据集市或宽表。
按照业务划分,如主题域流量、订单、用户等,生成字段比较多的宽表,用于提供后续的业务查询,OLAP 分析,数据分发等。
3)APP(数据应用层)
这时候已经是可以提供给业务直接使用的数据层了。
3、数仓建模方法
(1)范式建模:同关系型数据库三大范式,分别是:
每个属性值唯一,不具有多义性 ; 每个非主属性必须完全依赖于整个主键,而非主键的一部分 ; 每个非主属性不能依赖于其他关系中的属性,因为这样的话,这种属性应该归到其他关系中去
(2)维度建模(最常用的方法):分为两种表:事实表和维度表,维度建模就是在这两种表的基础之上来构建数据集市的。
维度表:指根据分析数据的角度,来创建的表,所谓维度,即指分析事物的角度,这个思想是重中之重,常见的角度有时间、地 域、终端、用户等。
事实表:必然存在的一些数据,像采集的日志文件,订单表,都可以作为事实表 。 特征:是一堆主键的集合,每个主键对应维度表中的一条记录,客观存在的,根据主题确定出需要使用的数据。 用人话讲,事实表,就是包含着ODS层,DWS,DWD层的表,可以说,除过维度表,在维度建模中,其他所有表,几乎都是事实表。