《2020/07/24》数仓理论

数仓理论

1. 数仓分层

1.1 数仓分层

  1. ODS(Operation Data Store)原始数据层
    原始数据层,存放原始数据,直接加载原始日志、数据,数据保持原貌不做处理。
  2. DWD(Data Warehouse Detail)明细数据层
    结构和粒度与原始表保持一致,对ODS层数据进行清洗(去除空值,脏数据,超过极限范围的数据)
  3. DWS(Data Warehouse Service)服务数据层
    以DWD为基础,进行轻度汇总
  4. ADS(Application Data Store)数据应用层
    为各种统计报表提供数据

1.2 数仓建模

1.2.1 ODS 层 (负责备份数据工作)

(1)保持数据原貌不做任何修改,起到备份数据的作用。
(2)数据采用LZO压缩,并创建索引减少磁盘存储空间(切片)
(3)创建分区表,防止后续的全表扫描
(4)创建外部表(多人共用),内部表(仅自己使用)

1.2.2 DWD 层 (负责准备数据工作)

DWD 层需构建维度模型,一般采用星型模型,呈现的状态一般为星座模型。
(1)数仓维度建模(星型模型),使维度退化。好处:减少后续大量join操作
(2)数据清洗(ETL)
(3)数据采用LZO压缩,
(4)parquet列式存储
(5)脱敏(手机号,身份证号,个人信息)
(6)对用户行为数据进行解析 event事件表

维度建模一般按照以下四个步骤: 选择业务过程→声明粒度→确认维度→确认事实
(1)选择业务过程
在业务系统中,挑选我们感兴趣的业务线,比如下单业务,支付业务,退款业务,物流 业务,一条业务线对应一张事实表。
(2)声明粒度
数据粒度指数据仓库的数据中保存数据的细化程度或综合程度的级别。
声明粒度意味着精确定义事实表中的一行数据表示什么,应该尽可能选择最小粒度,以 此来应各种各样的需求。
典型的粒度声明如下:
订单中,每个商品项作为下单事实表中的一行,粒度为每次下单
每周的订单次数作为一行,粒度就是每周下单。
每月的订单次数作为一行,粒度就是每月下单
(3)确定维度
维度的主要作用是描述业务是事实,主要表示的是“谁,何处,何时”等信息。维度退化
(4)确定事实
此处的“事实”一词,指的是业务中的度量值,例如订单金额、下单次数等。
在 DWD 层,以业务过程为建模驱动,基于每个具体业务过程的特点,构建最细粒度的 明细层事实表。事实表可做适当的宽表化处理。

1.2.3 DWS 层 (各个主题一天发生的行为数据)

统计各个主题对象的当天行为,服务于 DWT 层的主题宽表,以及一些业务明细数据, 应对特殊需求(例如,购买行为,统计商品复购率)。

1.2.4 DWT 层 (从用户或商品产生到当前时刻累积的数据)

以分析的主题对象为建模驱动,基于上层的应用和产品的指标需求,构建主题对象的全 量宽表

1.2.5 ADS 层 (分析具体报表,直观数据)

对电商系统各大主题指标分别进行分析。

1.3 数仓命名规范

ODS层命名为ods
DWD层命名为dwd
DWS层命名为dws
ADS层命名为ads
临时表数据库命名为xxx_tmp
备份数据数据库命名为xxx_bak

2. 理论

2.1 表的分类

  1. 实体表
    实体表,一般是指一个现实存在的业务对象,比如用户,商品,商家,销售员等等。
  2. 维度表
    维度表,一般是指对应一些业务状态,编号的解释表。也可以称之为码表。
    比如地区表,订单状态,支付方式,审批状态,商品分类等等。
  3. 事务型事实表
    事务型事实表,一般指随着业务发生不断产生的数据。特点是一旦发生不会再变化。
    一般比如,交易流水,操作日志,出库入库记录等等。
  4. 周期型事实表
    周期型事实表,一般指随着业务发生不断产生的数据。
    与事务型不同的是,数据会随着业务周期性的推进而变化。
    比如订单,其中订单状态会周期性变化。再比如,请假、贷款申请,随着批复状态在周期性变化。

2.2 同步策略

数据同步策略的类型包括:全量表、增量表、新增及变化表、拉链表
全量表:存储完整的数据。
增量表:存储新增加的数据。
新增及变化表:存储新增加的数据和变化的数据。
拉链表:对新增及变化表做定期合并。

2.2.1 实体表同步策略

实体表:比如用户,商品,商家,销售员等
实体表数据量比较小:通常可以做每日全量,就是每天存一份完整数据。即每日全量。

2.2.2 维度表同步策略

维度表:比如订单状态,审批状态,商品分类
维度表数据量比较小:通常可以做每日全量,就是每天存一份完整数据。即每日全量。
说明:
1)针对可能会有变化的状态数据可以存储每日全量。
2)没变化的客观世界的维度(比如性别,地区,民族,政治成分,鞋子尺码)可以只存一份固定值。

2.2.3 事务型事实表同步策略

事务型事实表:比如,交易流水,操作日志,出库入库记录等。
因为数据不会变化,而且数据量巨大,所以每天只同步新增数据即可,所以可以做成每日增量表,即每日创建一个分区存储。

2.2.4 周期型事实表同步策略

周期型事实表:比如,订单、请假、贷款申请等
这类表从数据量的角度,存每日全量的话,数据量太大,冗余也太大。如果用每日增量的话无法反应数据变化
每日新增及变化量,包括了当日的新增和修改。一般来说这个表,足够计算大部分当日数据的。但是这种依然无法解决能够得到某一个历史时间点(时间切片)的切片数据。
所以要用利用每日新增和变化表,制作一张拉链表,以方便的取到某个时间切片的快照数据。所以我们需要得到每日新增及变化量。

2.3 范式理论

2.3.1 范式概念

关系型数据库设计时,遵照一定的规范要求,目的在于降低数据的冗余性,目前业界范式有:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)、第五范式(5NF)。
范式可以理解为一张数据表的表结构,符合的设计标准的级别。
使用范式的根本目的是:
1)减少数据冗余,尽量让每个数据只出现一次。
2)保证数据一致性
缺点是获取数据时,需要通过Join拼接出最后的数据。

2.3.2 函数依赖

2.3.3 三范式

2.4 关系建模与维度建模

2.5 雪花模型、星型模型和星座模型

在维度建模的基础上又分为三种模型:星型模型、雪花模型、星座模型。

你可能感兴趣的:(数据仓库)