数据仓库分享
1. 数仓基础理论
Q1: 什么叫数据仓库?
这本书里对数据仓库的定义是为了构建新的分析处理环境而出现的一种数据存储和组织技术
Q2: 数仓与数据库的区别是什么?
- 业务场景不同,数据库主要用于支撑基本的、日常的事务处理。如银行交易流水,电商交易订单等,承担存储功能,支持修改,而数据仓库主要是用于OLAP等复杂的分析操作,侧重决策支持,并辅以可视化技术,将查询结果直观的,易化展示
- 前者数据的写入,修改等操作随时发生,而后者一般是一次写入,写入后很少修改。
Q3:数仓有什么特点?
- 面向主题
- 集成的
- 相对稳定的
- 反映历史变化
补充说明
数据仓库中的数据是按照一定的主题域进行组织。主题是一个抽象的概念,是指用户使用数据仓库进行决策时所关心的重点方面,一个主题通常与多个操作型信息系统相关。
数据仓库中的数据是在对原有分散的数据库数据抽取、清理的基础上经过系统加工、汇总和整理得到的,必须消除源数据中的不一致性,以保证数据仓库内的信息是关于整个企业的一致的全局信息。
数据仓库的数据主要供企业决策分析之用,所涉及的数据操作主要是数据查询,一旦某个数据进入数据仓库以后,一般情况下将被长期保留,也就是数据仓库中一般有大量的查询操作,但修改和删除操作很少,通常只需要定期的加载、刷新。
操作型数据库主要关心当前某一个时间段内的数据,而数据仓库中的数据通常包含历史信息,系统记录了企业从过去某一时点(如开始应用数据仓库的时点)到目前的各个阶段的信息,通过这些信息,可以对企业的发展历程和未来趋势做出定量分析和预测。
2、如何构建一个数仓
2.1 先介绍下数仓的分层
数据仓库一般采用三层分层法
- ODS层(数据操作层)直接接入的原始数据,简单清洗,从业务库直接同步而来
- DW层(数据仓库层)DW内部又可以分层,但DW层主要就是ODS ETL后的数据
- APP层 (数据应用层)应用DW层的数据
此外还有一个比较重的层DIM (维表层)
- 高基数维度数据:一般是用户资料表、商品资料表类似的资料表。数据量可能是千万级或者上亿级别。
- 低基数维度数据:一般是配置表,比如枚举值对应的中文含义,或者日期维表。数据量可能是个位数或者几千几万。
DW层的分层
- DWS层 (数据服务层)
- DWM层 (中间数据层)
- DWD层 (数据明细层)
2.2 数据仓库的构建
2.2.1 确定一个引擎
建立数仓,必定是基于某个引擎载体来实现的,不同的引擎载体,对应的特点也会有一些区别,所以建立数仓,根据自己的需求选取对应的数仓引擎
现在来讲一般确定使用那些存储后计算引擎,基本也就确定了数仓的架构设计,这里后面再说明。
根据实时性,可以分为两个方向
- 离线数仓
- 实时数仓
离线数仓组成组件
- hive on hivesql
- hive on sparksql
- hbase
- mapreduce
- azkaban
- oozie
- hdfs
- ….
实时数仓
- spark-streaming
- flink-streaming
- spark-core
- hbase
- elasticsearch
- redis
- clickhouse
- ….
2.2.1 确定一个主题
确定主题的思路一般自下向上自顶向下。
自顶向下是先有需求
比如产品经理结合现在的市场,或产品定位,需要一个金融方向在数据来支撑决策,或与产品功能相结合。也就是说不管公司数据如何的ETL,而产出的数据仓库的主题已经确定,后面的工作主要是想尽办法从数据中挖掘出相关数据集,支撑生成数据仓库。 一般来讲拥有大量、丰富数据的企业来实现,对量级有较高要求。
自下向上是先挖掘数据
自下向上则是,先从已有的数据集本身出发,通过对已有业务系统数据的分析,或聚类归纳等方向,先确定出现有数据集主要有哪些类型的数据,可以怎么结合从而输出哪些维度,从而构建出哪种类型的数仓。
2.2.3 确定建表模型
数据仓库的数据建模大致分为四个阶段
- 业务建模
- 领域概念(主题域)建模
- 逻辑建模
- 物理建模
数据仓库建模的方法
- 实体建模法
- 范式建模法
- 纬度建模法
这里重点介绍下纬度建模
纬度建模中的一些概念说明
事实表
事实表是维度模型的基本表,存放有大量的业务性能度量值。
事实表的设计中要解决几个重要问题:
- 确定粒度(记录事实的细节级)
- 相加性:事实的可加性是至关重要的,因为数据仓库应用几乎从不仅仅只检索事实表的单行数据。
- 键选择
- 一致性事实
事实表的分类:
- 事务事实表
- 周期快照事实表、
- 积累快照事实表。
维度表
维度属性是查询约束条件、成组与报表标签生成的基本来源。
度表包含有业务的文字描述。在一个设计合理的维度模型中,维度表有许多列或者属性,这些属性给出对维度表的行所进行的描述。
事实与维度的融合
由数字型度量值组成的事实表连接到一组填满描述属性的维度表上。这个星型特征结构通常被叫做星型连接方案。
纬度建模过程
维度建模具有一定顺序,分别是:①业务处理②粒度③维度④事实。
维度建模的三种模式
星形模式
星形模式(Star Schema)是最常用的维度建模方式
具有以下的特点
- 维表只和事实表关联,维表之间没有关联;
- 每个维表的主码为单列,且该主码放置在事实表中,作为两边连接的外码;
- 以事实表为核心,维表围绕核心呈星形分布;
雪花模式
对星形模式的扩展,每个维表可继续向外连接多个子维表。
下图为使用雪花模式进行维度建模的关系结构:
星座模式
星座模式(Fact Constellations Schema)也是星型模式的扩展。基于这种思想就有了星座模式:
星形模式/雪花模式/星座模式的关系
2.3 构建数仓
2.3.1 按层级划分存储组件
- 数据源:通过消息组件kafka来实时传输消息
- 数据明细层: 根据量级而动,涉及和组件有kafka、druid、hbase等
- 应用层:clickhouse、kylin、mysql、elasticsearch等
2.3.2 计算引擎组件
按不同架构区分:
- 离线大数据架构 hdfs、hive on mr 、hive on spark
- lambda架构: 在离线大数据架构的基础上增加新的实时链路,需要维护离线与实时两套代码 spark(主要指spark-streaming)
- kappa架构: 批流合一,离线处理和实时处理整合成一套代码,运维成本小,目前发展旺盛,大有直接成为数仓架构的趋势 采用的是flink
2.3.3 架构设计示意图
1、离线式数仓
实时数仓架构设计
lambda
kappa
3、数仓的使用场景
- ETL
- OLAP
- BI
- DMP
- 建模
4、我们数仓的建设思路
自顶向下的方式
偏向于技术性
实时数仓
要有几个比较突出的应用场景,如可视化,OLAP
细节后续讨论