数仓基础概念理解

以下观点仅代表个人,有错误的地方还请指出,共同交流

数仓概念

数据仓库的定义
面向主题的、集成的(数据仓库会将不同源数据库中的数据汇总到一起)、与时间相关且不可修改的数据集合。也就是说数仓是存数据的,企业的各种数据往里面塞,主要目的是为了有效分析数据,后续会基于它产出供分析挖掘的数据,或者数据应用需要的数据,如企业的分析性报告和各类报表,为企业的决策提供支持。

数仓和数据库的区别
数据库是面向事务的设计,数据仓库是面向主题设计的。
数据库一般存储在线交易数据,数据仓库存储的一般是历史数据。
数据库设计是尽量避免冗余,一般采用符合范式的规则来设计,数据仓库在设计是有意引入冗余,采用反范式的方式来设计,有利于提高查询效率。
数据库是为捕获数据而设计,数据仓库是为分析数据而设计。

数仓分层

数仓基础概念理解

  1. ODS层
    从MySQL日志和服务端public日志采集落到hive里面,从源系统直接获取数据,变成ods表,字段基本和源系统保持一致
    为什么不直接到DWD还要有ODS,因为数据采集是很大的任务,在里面加逻辑不太容易操作,容易出现错误,所以要先把采集到的元数据放到ods里面,再做进一步的规范和清洗到dwd

  2. DWD层
    对ods层的表进行清洗,然后按照统一的规则,按照业务方向,主题建设,同时构建一致性维表。依据维度建模理论,采用一些维度退化手法(冗余或打标),将维度作为属性退化到事实表中,减少事实表与维表的关联,提高数据的易用性。
    组合相关和相似数据:采用明细宽表复用关联计算,减少数据扫描。
    建立一致性维度:建立一致的数据分析维度和维表,减低数据计算口径、算法不一致风险。 dwd就是事实表,dim表是维度表

  3. DWM层
    主要存放历史行为数据,比如首次xxx,最近一次xxx,包含指标口径,就是指标的计算方式
    with cube 就是看不同维度下的不同数据的展示,
    例如group by product_id, country_code, city_id, passenger_id with cube,每个维度都有两个值,一个是汇总值,一个是null值,这四个维度进行with cube就会出现2* 2* 2 *2中结果的展示

  4. DM层
    数据集市层(DM): 以业务分析主题场景出发,整合多个数据域数据,建立业务主题分析宽表,用于满足业务查询、OLAP分析等需要。按需来建设,根据数据的主粒度,以及支持的维度,出一份数据

  5. APP层
    数据应用层(APP):提供差异化的数据服务、满足业务方的需求;在该层级实现报表(数易、邮件报表)、数据产品、或者其他分析主题的需要。对外提供服务的一层。

常用概念

数据漂移: 通常指ods表的同一个业务日期数据中包含前一天或者后一天凌晨附近的数据或者丢失当天的变更数据。
度量: 对某个业务事件的衡量,通常为数字,如某笔订单的金额,度量命名一般带上具体的业务动作,度量必须归属于某一业务过程,如支付金额,金额是度量,支付是业务过程
维度: 维度是度量的环境,事件发生的环境,例如在交易过程中,可以通过卖家,买家,商品和时间等维度描述交易发生的环境
维度的拆解: 对于维度属性过多,涉及源较多的维度表,可以做适当拆分。比如乘客表,可以拆分为核心表和扩展表。核心表相对字段较少,刷新产出时间较早,优先使用。扩展表字段较多,且可以冗余核心表部分字段,刷新产出时间较晚,适合数据分析人员使用。

数据记录数较大的维度表,可以适当冗余一些子集合,以减少下游扫描数据量。
原子指标: 基于某一业务时间行为下的度量。
原子指标= 业务过程(动作)+度量,如支付(事件)金额(度量)。
派生指标: 时间周期+修饰词+原子指标

  1. 事务型指标:对业务活动进行衡量的指标,例如订单支付金额,完单数,这类指标需要维护原子指标和修饰词,在此基础上创建派生指标
  2. 存量型指标:对实体对象(如乘客,司机)的某些状态的统计,如乘客总数,司机总数
  3. 复合型指标:指在事务型指标和存量型指标基础上复合而成,如比率型:完单率,应答率
    事实表分三种: 事务型事实表、周期快照事实表、累积快照事实表。
    缓慢变化维: 现实世界中,维度的属性并不是静止的,它会随时间的流逝发生缓慢的变化,与数据增长较为快速的事实表相比,维度的变化较为缓慢

建模理论

为什么要建模:
为了将数据进行有序有结构的分类组织和存储。数据模型就是数据组织和存储方法,它强调从业务,数据存储和使用角度更加合理的存储数据

维度建模:
宽表:为了提升访问便利性和访问性能,在维度模型的事实表基础上,将部分常用维度冗余到事实表。

首先是从ODS到DWD,第一,梳理ODS字段,把一些没有意义的,计算指标时用不到的字段去掉,然后规范化命名,然后看一下需要封装哪些字段(比如封装 今日出行 今日应答、超时自动取消等逻辑,is_td_trip bigint 今日出行 is_td_ans bigin 今日应答
诸如此类等。然后把这些需要封装的字段也添加到表中。计算逻辑都要根据不同的业务场景来判定,然后写SQL出一份dwd表。

从DWD到DWM,从DWD表中选出维度,指标的计算方式根据业务场景来,指标名要统一规范。从DWD表取维度,再根据里面的字段进行逻辑计算出一份DWM表。
DWM 是指标层面的轻度汇总层,DM数据集市是面向分析,指标的高度汇总层

由于涉及到一些公司业务的具体的内容,很多细节没有详细阐述。