【大数据系列】数仓知识
数据仓库
数仓开发是个不错的选择,事少,不卷
数据仓库概念
基础概念
数据仓库(英语:Data Warehouse,简称数仓、DW),是一个用于存储、分析、报告的数据系统。
数据仓库是存储数据的仓库, 主要是用于存储过去既定发生的历史数据,
数据仓库的目的是构建面向分析的集成化数据环境,分析结果为企业提供决策支持(Decision Support)。
数据仓库的输入方是各种各样的数据源,最终的输出用于企业的数据分析、数据挖掘、数据报表等方向。
应用场景:满足企业中所有数据的统一化存储,通过规范化的数据处理来实现企业的数据分析应用。
面对人员:一般业务数据库是对外的(客户),数据仓库是对内的(大数据分析人员)
为什么要去做数据分析?
假如你现在手里有2000w,当下的时间点去投资口罩生产,你做不做?能不能赚钱? => 不一定,需要数据支撑
假如你是公司营销总监,是否愿意招聘女主播进行短视频带货直播销售? => 不一定,需要数据分析
为什么需要数据仓库
为了更好的==分析数据而来==。正确的废话。
数据仓库是企业发展到一定阶段产生的
1 | 企业第一个阶段:增加用户数,业务量、维持企业则正常运转---》业务数据库(MySQL,Oracle,PSQL...)是为了让企业活下来,必须要存在。雪中送碳 |
数仓的本质
1 | 为了对公司业务数据进行分析,建立数仓,其实就是把公司各种业务数据存到HDFS上,将HDFS上的业务数据文件转为Hive表,进行分析。 |
ETL: 抽取 转换 加载
指的: 数据从数据源将数据灌入到ODS层, 以及从ODS层将数据抽取出来, 对数据进行转换处理工作, 最终将数据加载到DW层, 然后DW层对数据进行统计分析, 将统计分析后的数据灌入到DA层, 整个全过程都是属于ETL范畴
狭义上ETL: 从ODS层到DW层过程
抽取(extract):业务数据表很多,抽取想要的原始数据
转换(transform):将格式处理成想要的样子,常见的转换方式有数据类型转换、格式转换、缺失值补充、数据综合等。
加载(load):将转换后的数据转成hive中的表(数据仓库),一般是按一定的频率装载(Oozie定时调度)
ELT: 抽取 加载 转换
数据相对规整,可以装载到ODS后再转换
1 | E: 抽取 |
数仓分层
对数据不断处理的阶段叫做分层,本质是创建不同的数据库达到区分
数据仓库和数据库的区别
数据仓库的出现,并不是要取代数据库
数据库(OLTP): 面向于事务(业务)的 , 主要是用于捕获数据 , 主要是存储的最近一段时间的业务数据, 交互性强 一般不允许出现数据冗余
数据仓库(OLAP): 面向于分析(主题)的 , 主要是用于分析数据, 主要是存储的过去历史数据 , 交互性较弱 可以允许出现一定的冗余
1 | # OLTP |
数据仓库和数据集市
数据仓库其实指的集团数据中心: 主要是将公司中所有的数据全部都聚集在一起进行相关的处理操作 (ODS层)
此操作一般和主题基本没有什么太大的关系
数据的集市(小型数据仓库): 在数据仓库基础之上, 基于主题对数据进行抽取处理分析工作, 形成最终分析的结果
一个数据仓库下, 可以有多个数据集市
数仓专注分析
- 数据仓库本身并不“生产”任何数据,其数据来源于不同外部系统;
- 同时数据仓库自身也不需要“消费”任何的数据,其结果开放给各个外部应用使用;
- 这也是为什么叫“仓库”,而不叫“工厂”的原因。
数仓的一切目标都是为了分析数据,给企业提供决策支撑。
数据仓库主要特征
- 面向主题:我们开展数据分析的时候,需要确定一个主题(或者说业务领域)
1 | 不同于传统数据库对应于某一个或多个项目,数据仓库根据使用者实际需求,将不同数据源的数据在一个较高的抽象层次上做整合,所有数据都围绕某一主题来组织。 |
- 集成性:主题相关的数据通常会分布在多个操作型系统中,彼此分散、独立、异构。需要集成到数仓主题下。同时在数据进入数据仓库之前,必然要经过统一与综合,对数据进行抽取、清理、转换和汇总
1 | 数仓的数据往往来自多种数据源,需要将多个数据源的数据(异构数据)进行整合,整合时会面临格式不一致,口径不统一,字段同名不统一、单位不统一、编码不统一等问题,则需要对数据进行处理,这个过程也被称为ETL(Extract抽取 Transform转换 load加载)。 |
- 非易失性(稳定性):数仓是数据分析的平台,而不是数据创造的平台。反映的是一段相当长的时间内历史数据的内容(历史快照)。数据仓库中一般有大量的查询操作,但修改和删除操作很少。
1 | 数据仓库基本上是不许允许用户进行修改,删除操作的。大多数的场景是用来查询分析数据。 |
- 时变性:数仓的数据需要随着时间更新,原有的分析手段以及原有数据可能都会出现变化(分析手动更换, 以及数据新增),以适应决策的需要。
1 | 数据仓库会定期接收新的集成数据,反应出最新的数据变化。这和稳定特点并不矛盾。 |
数据仓库主流开发语言
SQL => YYDS
虽然SQL语言本身是针对数据库软件设计的,但是在数据仓库领域,尤其是大数据数仓领域,很多数仓软件都会去支持SQL语法;
场景案例:数据仓库为何而来
以中国人寿保险公司(chinalife)发展为例,阐述数据仓库为何而来?
业务数据的存储问题
中国人寿保险(集团)公司下辖多条业务线,包括:人寿险、财险、车险,养老险等。各业务线的业务正常运营需要记录维护包括客户、保单、收付费、核保、理赔等信息。这么多业务数据存储在哪里呢?
联机事务处理系统(OLTP)正好可以满足上述业务需求开展, 其主要任务是执行联机事务处理。其基本特征是前台接收的用户数据可以立即传送到后台进行处理,并在很短的时间内给出处理结果
关系型数据库(RDBMS)是OLTP典型应用,比如:Oracle、MySQL、SQL Server等
目前看好像没有什么问题
分析型决策的制定
随着集团业务的持续运营,业务数据将会越来越多。由此也产生出许多运营相关的困惑:
- 能够确定哪些险种正在恶化或已成为不良险种?
- 能够用有效的方式制定新增和续保的政策吗?
- 理赔过程有欺诈的可能吗?
- 现在得到的报表是否只是某条业务线的?集团整体层面数据如何?
为了能够正确认识这些问题,制定相关的解决措施,瞎拍桌子是肯定不行的。
最稳妥办法就是:基于业务数据开展数据分析,基于分析的结果给决策提供支撑。也就是所谓的数据驱动决策的制定.
在哪里做数据分析?数据库可以吗?
OLTP环境开展分析可行吗?
可以,但是没必要
OLTP系统的核心是面向业务,支持业务,支持事务。所有的业务操作可以分为读、写两种操作,一般来说读的压力明显大于写的压力。如果在OLTP环境直接开展各种分析,有以下问题需要考虑:
- 数据分析也是对数据进行读取操作,会让读取压力倍增;
- OLTP仅存储数周或数月的数据;
- 数据分散在不同系统不同表中,字段类型属性不统一;
数据仓库面世
- 当分析所涉及数据规模较小的时候,在业务低峰期时可以在OLTP系统上开展直接分析。
- 但为了更好的进行各种规模的数据分析,同时也不影响OLTP系统运行,此时需要构建一个集成统一的数据分析平台。该平台的目的很简单:面向分析,支持分析,并且和OLTP系统解耦合。
- 基于这种需求,数据仓库的雏形开始在企业中出现了。
数据仓库的构建
如数仓定义所说,数仓是一个用于存储、分析、报告的数据系统,目的是构建面向分析的集成化数据环境。我们把这种面向分析、支持分析的系统称之为OLAP(联机分析处理)系统。当然,数据仓库是OLAP系统的一种实现。
中国人寿保险公司就可以基于分析决策需求,构建数仓平台。
维度分析
维度分析: 针对某一个主题, 可以从不同的维度的进行统计分析, 从而得出各种指标的过程
什么是维度
维度一般指的分析的角度, 看待一个问题的时候, 可以多个角度来看待, 而这些角度指的就是维度
比如: 有一份2020年订单数据, 请尝试分析 => 可以从时间, 地域 , 商品, 来源 , 用户….
比如你要分析产品销售情况,你可以选择按类别进行分析,或按区域分析。这样的按…分析就构成一个维度。
每个维度表都包含单一的主键列。维度表的主键可以作为与之关联的任何事实表的外键,当然,维度表行的描述环境应与事实表行完全对应。
1 | 通俗解释:维度就是看待分析问题的角度。 |
维度的功能
细化指标,更加精确的发现问题
1 | 老板说:咱们这个月呀,销售额明显下降了,你去查查什么原因? |
维度的分类
- 定性维度: 指的计算每天 每月 各个的维度 , 一般来说定性维度的字段都是放置在group by 中 (不具体)
- 定量维度: 指的统计某一个具体的维度或者某一个范围下信息, 比如说: 2020年度订单额, 统计20~30岁区间人群的人数 ,一般来说这种维度的字段都是放置在where中 (具体)
维度的分层和分级
本质上对维度进行细分的过程
比如按年统计:
- 按季度
- 按照月份
- 按照天
- 按照每个小时
比如按省份统计:
- 按市
- 按县
常见的维度
- 时间维度:年 月 天
- 地域维度:国 省 市 县
- 产品维度: 高端 中端 低端
- 终端维度:PC 移动 windows MAC
- ……..
从实际分析中, 统计的层级越多, 意味统计的越细化 设置维度内容越多
维度的下钻和上卷
以某一个维度为基准, 往细化统计的过程称为下钻, 往粗粒度称为上卷
比如: 按照 天统计, 如果需要统计出 小时, 指的就是下钻, 如果需要统计 季度 月 年, 称为上卷统计
从实际分析中, 下钻和上卷, 意味统计的维度变得更多了
下钻:当前基于一个大的维度进行分析,要下钻到一个更细的维度进行分析
先按年分析
然后按照月分析
由粗粒度到细粒度是下钻
上卷:当前我的分析是基于一个小的维度进行分析,要上卷到一个大的颗粒维度来进行分析
先按每个小时分析
然后按照每天分析
由细粒度到粗粒度是上卷
总结:==维度和指标在SQL层面是一个怎样的关系==?
1 | --指标:聚合统计分析的一个结果,数值 |
什么是指标
一般可以直观的认为select聚合的字段是指标,group by分组的是维度
指标指的衡量事务发展的标准,对数据统计分析得到的结果,就是度量值,也称为指数
指标的分类
绝对指标: 计算具体的值指标 count() sum() max() min() avg()
相对指标: 计算比率问题的指标 转化率, 流失率, 同比
指标设计
假如业务要求要去分析网站访问情况的好坏情况,请问分析什么?
访问人数?点击次数?搜索次数?
新用户注册率?老用户回头率?
a、指标的概念
==指标是衡量事物发展的标准,也叫度量==,如价格,销量等;指标可以求和、求平均值等计算;
指标分为绝对数值和相对数值:
==绝对数值==反映具体的大小和多少,如价格、销量、分数等; —》普通数字
==相对数值==反映一定的程度,如及格率、购买率、涨幅等。 —》%百分比
对数 据统计分析得到的结果,就是指标,是一个度量值,也称为指数。
b、指标的功能
通过指标来衡量事实的结果,反映事实的好坏。
比如:今天的网站访问情况和昨天相比如何?如何比?比什么?
比较指标:新老访客数、回头率、页面点击数
c、常见的指标
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25每个行业的需求不同,指标也不同
- 教育行业:旷课率
- 游戏行业:通关率
- 金融行业:还款率
- 电商行业:履单率
#基础指标
比如网站访问分析中,常见的UV(独立访客)、PV(页面访问量)、IP指标(独立IP)
比如电商购物分析中,常见的下单数、回购率、退单率
张三 192.168.88.80 汽车之家70个页面
张三 192.168.88.81 汽车之家60个页面
李四 192.168.88.91 汽车之家30个页面
李四 192.168.88.92 汽车之家40个页面
UV: 2个用户
PV: 打开200个网页
IP: 4个不同的IP地址
#关键指标/核心指标
关键指标就是运营管理者(领导层)最关心的指标,比如市场总监提出的产品销量、新增客户等指标;财务经理提出的营业额、利润率等。
最近一年客户对汽车之家热度变化情况?Q:指标体系怎么构建的?谁负责这个事?
https://www.zhihu.com/question/23774081/answer/1191077182
推荐书籍《数据产品经理修炼手册》
案例
1 | 需求: 请求出在2020年度, 女性 未婚 年龄在18~25岁区间的用户每一天的订单量? |
数仓建模
决定了数据存储的方式,表的设计。
比如:有哪些表,表中有哪些字段?表之间有什么关系等等。
数仓建模指的规定如何在hive中构建表, 数仓建模中主要提供两种理论来进行数仓建模操作: 三范式建模和维度建模理论
三范式建模: 主要是存在关系型数据库建模方案上, 主要规定了比如建表的每一个表都应该有一个主键, 数据要经历的避免冗余发生等等
维度建模: 主要是存在分析性数据库建模方案上, 主要一切以分析为目标, 只要是利于分析的建模, 都是OK的, 允许出现一定的冗余, 表也可以没有主键
维度建模的两个核心概念:事实表和维度表。
ER模型
ER模型概念
==ER模型==也称==实体-关系图==(Entity Relationship Diagram),由Peter Chen(陈品山)于1976年提出;
ER模型围绕真实世界的实体和它们之间的关系展开,被认为是设计数据库的好选择。
1 | ER模型三要素 |
ER模型的应用
一般用于==RDBMS系统中来实现业务数据库的建模==。
1 | 数据仓库之父Bill Inmon提出的数据仓库建模方法是自上而下的,从全企业的高度设计一个符合3NF的数据模型,用实体关系(Entity Relationship,ER)模型描述企业的业务。 |
ER模型的构建流程
step1:找到所有实体,以及每个实体的属性
step2:找到所有实体之间的关系
step3:建表,每个实体与每个关系都是一张表
1 | 业务:jack在一品生鲜买了波士顿龙虾4只。 |
ER模型优缺点
- 优点:符合数据库的设计规范,没有冗余数据,保证性能,业务的需求把握的比较全面。
- 缺点:设计时候非常复杂,必须找到所有实体和关系,才能构建。
维度建模
维度建模概念
维度建模是专门用于分析型数据库、数据仓库、数据集市建模的方法。
维度模型是数据仓库领域大师Ralph Kimall所倡导,他的《数据仓库工具箱》,是数据仓库工程领域最流行的数仓建模经典。
维度建模==以分析决策的需求出发==构建模型,构建的数据模型为分析需求服务,因此它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能。
在维度建模中,牵扯到两个基本的名词:==维度==,==事实==。
1 | 1、事实就是你要关注的内容; |
维度建模的构建流程
step1:确定事实表
step2:构建维度表
1 | 业务行为:昨天早上张三在京东LV官方店花费20000元购买了一个皮包. |
维度建模与ER建模的区别
- 实体-关系建模是面向应用,遵循第三范式,以消除数据冗余为目标的设计技术。
- 维度建模是面向分析,==为了提高查询性能可以增加数据冗余==,==反规范化==的设计技术。
事实表
事实表: 事实表一般指的就是分析主题所对应的表,每一条数据用于描述一个具体的事实信息, 这些表一般都是一坨主键(外键)和描述事实字段的聚集
1 | 例如: 比如说统计2020年度订单销售情况 |
事实表的特点
- 事实表包含了与各维度表相关联的外键,可与维度表关联;
- 表里没有存放实际的内容,是一堆主键的集合,这些主键ID分别能对应到维度表中的一条记录;
- 事实表的度量(指标)通常是数值类型;
- 事实表记录数会不断增加,表数据规模迅速增长。
事实表比如订单表,一直在增长,但是维度表就不一定了,比如地区维度,相对增长缓慢。
事实表度量(指标)分类
1 | 1、可加数值类型 |
事实表的分类
1、事务事实表:(Transaction fact table)
保存的是最原子的数据,也称“原子事实表”或“交易事实表”。沟通中常说的事实表,大多指的是事务事实表。
- 事务事实表中的数据在事务事件(增删改)发生后产生,数据的粒度通常是每个事务一条记录;
- 一旦事务被提交,事实表数据被插入,数据就不再进行更改,其更新方式为增量更新;
1 | =订单事实表: |
2、周期快照事实表:(Periodic snapshot fact table)
周期快照事实表以具有规律性的、可预见的时间间隔来记录事实,时间间隔如每天、每月、每年等等,典型的例子如销售日快照表、库存日快照表等;
周期表由事务表加工产生
- 周期快照事实表的粒度是每个时间段一条记录,通常比事务事实表的粒度要粗,是在事务事实表之上建立的聚集表。比如说时间周期是1周,那么这个周期快照事实表的一条记录就是这一周的对于某个度量的统计值。
- 周期快照事实表的维度个数比事务事实表要少。
- 周期快照事实表的日期维度通常是记录时间段的终止日,记录的事实是这个时间段内一些聚集事实值。
1 | =销售月快照表 |
3、累计快照事实表:(Accumulating snapshot fact table)
完全覆盖一个事务或产品的生命周期的时间跨度,它通常具有多个日期字段,用来记录整个生命周期中的关键时间点,例如订单累计快照事实表会有付款日期,发货日期,收货日期等时间点。
周期快照事实表记录的确定的周期的数据,而累积快照事实表记录的不确定的周期的数据。
事务事实表中一个完整的交易记录会有一系列不同状态的数据来记录整个交易过程;而累积快照事实表只会有一条记录,数据会一直更新直到过程结束。
1 | =订单累积快照事实表 |
4、无事实事实表
- 没有事实发生,没有度量值(指标),都是一堆外键;
- 作用:梳理==维度之间的对应关系==,并且能更快获得关系数据。
- 常被用于回答“什么未发生”这样的问题
1 | =促销范围无事实事实表 |
数仓中以分析为优先,不计较冗余。能将计算的指标都放到一个表就放到一个表,SQL写起来比较方便
维度表
维度表: 指的在对事实表进行统计分析的时候, 基于某一个维度, 这个维度信息可能其他表中, 而这些表就是维度表
1 | 维度表并不一定存在, 但是维度是一定存在: |
维度表的分类:
1 | 高基数维度表: 指的表中的数据量是比较庞大(千万行以上)的, 而且数据也在发送的变化 |
维度建模概况总结:
事实表的设计是以能够正确记录历史信息为准则。
维度表的设计是以能够以合适的角度来聚合主题内容为准则。
维度建模的三种模型
第一种: 星型模型
- 特点: 只有一个事实表, 那么也就意味着只有一个分析的主题, 在事实表的周围围绕了多个维度表, 维度表与维度表之间没有任何的依赖
- 在代码层面感知模型:比如A关联B,A关联C,A关联D
- 在数仓发展初期最容易产生模型
第二种: 雪花模型
- 特点: 只有一个事实表, 那么也就意味着只有一个分析的主题, 在事实表的周围围绕了多个维度表, 维度表可以接着关联其他的维度表
- 反映数仓发展出现了畸形产生模型, 这种模型一旦大量出现, 对后期维护是非常繁琐, 同时如果依赖层次越多, SQL分析的难度也会加大,这种模型不太容易理解,维护成本比较高,而且性能方面需要关联多层维表,性能也比星型模型要低。所以一般不是很常用。
- 在代码层面感知模型:比如A关联B,B关联C,C关联D
- 此种模型在实际生产中,建议尽量减少这种模型产生
第三种: 星座模型
- 特点: 有多个事实表, 那么也就意味着有了多个分析的主题, 在事实表的周围围绕了多个维度表, 多个事实表在条件符合的情况下, 可以共享维度表
- 在数仓发展中后期最容易产生模型
整理表和表的关系叫做血缘管理,比如:apache atlas
不同业务线(对应不同业务数据库)梳理关系(数据治理、数据中台、数据湖、血缘管理),事实和事实表什么关系,以谁为主,什么表可以共用,放到数仓中形成星座模型。这个称为模型构建,还是很有挑战性的。
缓慢渐变维(SCD)
也叫缓慢变化维
解决问题: 解决历史变更数据是否需要维护的情况
背景:
比如客户信息,某个客户一开始在A城市,但某时间点之后,搬家到了B城市。在跟踪这个客户的消费行为的时候必然要考虑其在不同地区的差异。因此需要记录客户的之前和现在的状态。
大多数维度表随时间的迁移是缓慢变化的,修改更新个属性字段值啥的,因此在设计维度和使用维度的过程中,就要考虑到缓慢变化维度的处理。
当然也有不变的维度和剧烈变化的维度:例如一个人的相关信息,身份证号、姓名和性别等信息数据属于不变的部分,政治面貌和婚姻状态属于缓慢变化部分,而工作经历、工作单位和培训经历等在某种程度上属于急剧变化字段。
案例引出历史状态丢失问题
顾客信息表,2012年1月1日起,BIWORK居住在北京
2012年3月12日以后搬去了三亚居住,因此该条数据进行了更新
问题来了
- 需要对2012年的居住在北京的数据进行统计,这条数据是否参与统计? 必须参加统计
- 但是如果参与统计,数据中这条信息已经没有了,无法统计,因为现在记录的就是住在三亚。
- 历史状态没有了。
SCD三种解决方案
- SCD1:直接覆盖, 不维护历史变化数据
- 主要适用于: 对错误数据处理(过去的状态就认为是错误的,也就不要保留统计了)
- SCD2:不删除、不修改已存在的数据, 当数据发生变更后, 会添加一条新的版本记录的数据, 在建表的时候, 会多加两个字段(起始时间, 截止时间), 通过这两个字段来标记每条数据的起止时间 , 一般称为拉链表
- 好处: 适用于保存多个历史版本, 方便维护实现
- 弊端: 会造成数据冗余情况, 导致磁盘占用率提升
常见的维护历史状态的做法是:在表中添加两个字段,表示该条数据状态的起始时间、结束时间
1 | | 用户id | 所在的地区 | 时间标记:startTime | 时间标记:endTime | |
适用于变化不快的,如果变化很快就会产生很多数据
- SCD3: 通过在增加列的方式来维护历史变化数据
- 好处: 减少数据的冗余, 适用于少量历史版本的记录以及磁盘空间不是特别充足情况
- 弊端: 无法记录更多的历史版本, 以及维护比较繁琐(要改表结构,动数据,表大就不太合适)
1 | 面试题: |
数仓分层
分层其实不固定,按公司定的标准来就行
按照数据流入流出的过程,数据仓库架构可分为三层——**源数据(Operational Data Store)**、数据仓库(Data Warehouse)、数据应用(DataApplication)
1 | 1、数仓的分层是数仓的数据从进来到出去整个数据流向在不同阶段的称呼。 |
分层为的就是从源数据到目标数据处理的步骤体系不乱。
分层的开发环境:
不分层的开发环境:
原有的基础分层
ODS层: 源数据层
作用: 对接数据源, 和数据源的数据保持相同的粒度(将数据源的数据完整的拷贝到ODS层中)
注意: 如果数据来源于文本文件, 可能会需要先对这些文本文件进行预处理(spark)操作, 将其中不规则的数据, 不完整的数据, 脏乱差的数据先过滤掉, 将其转换为一份结构化的数据, 然后灌入到ODS层
1 | 名称:操作型数据存储、源数据层、贴源层、数据暂存层、数据引入层 |
DW层: 数据仓库层
作用: 进行数据分析的操作
1 | 名称:数据仓库层 |
DW层:数据仓库层 细化
概述
在数仓3层的分层架构中,处于中间的DW数据仓库层应该是核心中的核心。
实际应用中,为了更加清晰、便捷、高效的分析数据,会对DW进行更进一步的细化分层。
至于具体再细化几层,怎么细化,则没有统一的标准。
栗子
1 | 1.明细层DWD(Data Warehouse Detail):存储明细数据,此数据是最细粒度的事实数据。该层一般保持和ODS层一样的数据粒度,并且提供一定的数据质量保证。同时,为了提高数据明细层的易用性,该层会采用一些维度退化手法,将维度退化至事实表中,减少事实表和维表的关联。 |
DA层: 数据应用层(APP、ADS)
作用: 存储DW层分析的结果, 用于对接后续的应用(图表, 推荐系统…)
1 | 名称:数据应用层 |
分层案例
通过此案例,希望能够理解案例中分层设计的实现
电商平台案例
DWD轻度汇总,没有group by 的明细数据 (分)
DWM初步打散,有group by 的汇总,(合)
DWS业务汇总,形成不同的主题数据(分)
阿里巴巴数仓分层案例
计算口径不统一:XXX率,保留几位小数? 优良 大于多少数值算优良?
2个业务线的字段不统一,比如在业务线A叫empid,业务线B叫emp_id
美团点评酒旅数据仓库建设实践
携程数仓设计
每个行业,每家公司都可以根据自己的需求去添加、删除分层的个数。
没有好的分层架构、只有适合自己的架构
它山之石可以攻玉。
教育数仓分层
ODS层: 源数据层
作用: 对接数据源, 和数据源的数据保持相同的粒度(将数据源的数据完整的拷贝到ODS层中)(贴源表)
注意: 如果数据来源于文本文件, 可能会需要先对这些文本文件进行预处理(spark)操作, 将其中不规则的数据, 不完整的数据, 脏乱差的数据先过滤掉, 将其转换为一份结构化的数据, 然后灌入到ODS层
一般放置 事实表数据和少量的维度表数据
DW层: 数据仓库层
- DWD层: 明细层
作用: 用于对ODS层数据进行清洗转换工作 , 以及进行少量的维度退化操作(1-3个)
少量: 将多个事实表的数据合并为一个事实表操作;如果维度表放置在ODS层,一般也是在DWD层完成维度退化
什么叫做维度退化: 是为了减少维度表的关联工作
做法: 将数据分析中可能在维度表中需要使用的字段, 将这些字段退化到事实表中, 这样后续在基于维度统计的时候, 就不需要在关联维度表, 事实表中已经涵盖了维度数据了(多表关联->单表查询)
例如: 订单表, 原有订单表中只有用户id, 当我们需要根据用户维度进行统计分析的时候, 此时需要关联用户表, 找到用户的名称, 那么如果我们提前将用户的名称放置到订单表中, 那么是不是就不需要关联用户表, 而则就是维度退化
好处: 减少后续分析的表关联情况
弊端: 造成数据冗余
- DWM层: 中间层
作用: 1) 用于进行维度退化操作 2) 用于进行提前聚合操作(周期快照事实表)
- DWS层: 业务层
作用: 进行细化维度统计分析操作
DA层: 数据应用层
作用: 存储基于DWS层再次分析的结果, 用于对接后续的应用(图表, 推荐系统…)
例如: 比如DWS层的数据表完成了基于订单表各项统计结果信息(宽表), 但是图表只需要其中销售额, 此时从DWS层将销售额的数据提取出来存储到DA层(萃取表)
DIM层: 维度层
作用: 存储维度表数据,维度表比较多(>3)的时候放在DIM层,将维度退化工作放在DWM层。
划分逻辑层次结构,主要是为了后续的维护
新零售项目数仓分层
==烂熟于心。能说会道。理解再复述。==
新零售分层架构图
ODS(数据临时存储层)
1
2
3
4
5功能:将各个数据源的原始数据几乎无处理地存放在数据仓库系统中,结构上与源系统基本保持一致,是数据仓库的数据准备区。这一层的主要职责是将基础数据同步至数仓。
做法:Hive数仓创建ODS数据库,逻辑分层。
友情提示:在实时数仓中,常常使用kafka这样的分布式消息队列作为ODS层的存储工具。各个数据源作为生产者把数据写入kafka,然后使用flink等实时计算引擎进行各种ETL,结果保存至诸如Redis、HBase的实时存储中。DW
DWD(==明细==数据层 Data Warehouse ==Detail==)
1
2
3功能:数据来自于ODS,一般保持和ODS层数据一样的粒度;并且提供一定的数据质量保证,对来自ODS数据层做一些数据清洗和规范化的操作,提供更干净的数据。
此外: 区分ODS中各个数据到底是属于事实(Fact Table),还是属于维度(Dimension Table)。DWB(==基础==数据层 Data Warehouse ==Base==)
1
2
3功能:基础数据层一般用作中间层。多张表数据关联在一起,降维操作,形成一张大宽表。DWB层表数据量较少,只需要保留一定周期内的数据,当前有效的数据。
说明: 宽表指的的表的字段多。不同表的内容形成一张宽表,已经明显不符合三范式设计要求了。合并成宽表的目的就是提高计算时的效率。(查询多张表和查询一张表的性能差异)DWS(==服务==数据层 Data Warehouse ==Service== )
1
2
3
4
5
6
7功能: 基于DWB上的基础数据,整合汇总成分析某一个主题域的服务数据,一般是宽表。
作用: 基于分析主题根据相关指标 维度进行提前统计聚合操作(提前聚合), 形成宽表统计结果数据
例如:需要统计每天 每月 每年的 销售总额, 此时为了后续统计分析, 可以在DWS层, 先按照每天将销售总额统计出来即可。这样, 后续在统计每月 每年的时候, 就可以基于每天的结果进行汇总合并即可。
说明: 根据主题划分。
DM(数据集市层 Data Mart)
1
功能职责:进行细粒度统计操作, 基于DWS层, 进行上卷维度统计操作, 形成大的主题统计宽表 (一般来说是一个主题对应一个统计宽表)
RPT(报表应用层 DA)
1
作用: 存储分析的结果表, 会对DM层统计宽表, 根据需求要求, 从宽表中获取想要的数据, 将这些数据灌入到DA层
关注:数据治理+数据中台+数据湖+血缘管理