离线数仓基础理论 V1.0

一、概述

1.1 概念定义:

本质上是一个数据管理系统
主要功能:
1)整合多源数据
2)提供分析接口

1.2 架构

数仓架构

涉及框架:
传输:DataX,MaxWell,Flume,Kafka
存储:Hadoop
分析:Hive
调度:DolphinScheduler
报表展示:Superset

二、 建模概述

2.1 意义

1)高性能:快速查询
2)低成本:减少重复计算
3)高效率:提高用户使用数据的效率
4)高质量:减少计算错误可能性

2.2 建模方法论

  • ER模型
    实体关系(Entity Relationship, ER),符合3NF


    ER模型举例
  • 1)实体关系模型
    实体:对象
    关系:两个实体之间的关系
    出发点:整合数据,减少冗余

  • 2)数据库规范化
    目的:减少数据冗余,增强数据一致性
    六范式:1NF,2NF,3NF,BCNF,4NF,5NF

  • 3)三范式
    ①函数依赖
    完全函数依赖 (X ==> Y) && (X' !==> Y)
    部分函数依赖 (X ==> Y) && (X' ==> Y)
    传递函数依赖 (X ==> Y) && (Y !==> X) && (Y ==> Z)
    ②第一范式 1NF
    原则:属性不可切割(原子属性)
    解释:每一个元素必须拆解至不能再拆解
    ③第二范式 2NF
    原则:不能存在 部分函数依赖
    解释:元素必须只能与主键一一对应,
    ④第三范式 3NF
    原则:不能存在 传递函数依赖
    解释:

  • 维度模型
    事实:业务过程(不可拆分的行为事件)
    维度:业务过程发生时所处的环境
    优点:简洁,清晰
    出发点:数据分析


    维度模型举例

三、维度建模理论--事实表

3.1 事实表概述

  • 数仓维度建模核心
  • 围绕业务过程设计
  • 包含:与业务过程有关的维度引用(维度表外键)以及业务过程的度量(数字类型字段)
  • 事实表特点
    列少,行多,行增长快速
  • 事实表分类
    事务事实表、周期快照事实表、累积快照事实表

3.2 事务型事实表

  • 概述:保存各业务过程的原子操作事件,最细力度的操作事件
  • 设计步骤:
    1、选择业务过程:一个业务过程对应一个事务型事实表
    2、声明粒度:为每个业务声明粒度(定义每行数据的具体含义,应尽可能最细)
    3、确认维度:确认与本表相关的维度(环境信息,尽量丰富)
    4、确认事实:确定业务的度量值
  • 不足:存量型指标、多事务关联统计

3.3 周期性快照事务表

  • 概述:以规律、可预见的时间间隔记录事实,用于分析存量型、状态型指标
  • 设计步骤:
    1、确定粒度:周期(通常选每日)、维度
    2、确认事实:业务过程、指标
  • 事实(度量值)类型
    1、可加事实:可按照所有相关维度进行累加
    2、半可加事实:只能按照一部分相关维度进行累加
    3、不可加事实:没有可加性

3.4 累积型快照事实表

  • 概述:一个业务流程中多个关键业务过程联合处理,一般具有多个日期字段,主要用于分析业务过程之间的时间间隔等需求
  • 设计流程
    1、选择业务过程:一个业务流程中的多个关键业务过程(里程碑),多个关键业务过程对应一个累计型快照事实表
    2、声明粒度:定义每行数据的具体含义,应尽可能最细
    3、确认维度:选择与每个业务过程相关的维度,至少需要一个日期维度
    4、确认事实:各业务过程的度量值

四、维度建模理论--维度表

4.1 维度表概述

  • 维度建模基础
  • 围绕业务过程所处的环境设计
  • 包含:一个主键,各种维度字段(维度属性)

4.2 维度表设计步骤

  • 确定维度(表)
    维度唯一性:若多个事实表与同一维度相关,应保证维度唯一性(只创建一张维度表)
    维度退化:某维度表属性很少,此表可省略不创建,将该表的属性直接增加到相关的事实表中
  • 确定主维表和相关维表
    指业务系统中与某维度相关的表,分主次(一大类表中的“主键”===>主表)
  • 确定维度属性
    1)尽量丰富:表内高维
    2)尽量不编码:文字说明+编码
    3)尽量沉淀出通用的维度属性:将获取复杂的维度属性沉淀到维度表中

4.3 维度设计

  • 规范化、反规范化
    规范化:范式设计,减少冗余,但表数量增加。(雪花模型❄)
    反规范化:多表整合,减少join,提高查询性能(星型模型⭐)
    两种模型的对比
  • 维度变化
    目的:反映历史变化
    问题点:如何保存维度的历史状态
    1)全量快照表:每天保存一次全量的维度数据。
    优点:简单,有效。
    缺点:浪费存储空间(FNNDP,硬盘能值几个钱??)
    2)拉链表:记录每条信息的生命周期
    适用场景:数据会变化,但频率不高的维度(缓慢变化维)
    使用方式:start<=某日期 && end >=某日期,即可获得某日期的具体数据全量切片
  • 多值属性
    某属性同时有多个值
    1)多值属性放入同一字段:(key1,value1),(key2,value2)……
    2)多值属性放入多个字段:只适用于个数固定的情况

五、数据仓库设计

5.1 数仓分层规划

  • ODS(Operation Data Store)原始数据层:同步(全量、增量)、结构化(非结构化转为结构化)、保存历史数据、清洗数据

  • CDM(Common Data Model)公共数据层:
    数据加工与整合、建立一致性维度、汇总公共粒度的指标、构建明细事实表
    包含以下三个层次
    -1. DWD(Data Warehouse Detail)明细数据层:存放事实表,保存最小粒度的业务过程
    -2. DIM(Dimension)公共维度层:存放维度表,建立一致性维度
    -3. DWS(Data Warehouse Summary)汇总数据层:构建命名规范、口径一致的统计指标,建立汇总宽表

  • ADS(Application Data Service)数据应用层:存放指标统计结果
    分层规划
  • 数据流向:

    如下图所示。ODS层和DWD层会放在数据中间件中,供下游订阅使用。而DWS层和ADS层的数据通常会落地到在线存储系统中,下游通过接口调用的形式使用。
    数据流向
  • 层次调用规范
    ADS应用层优先调用数据仓库公共层数据。如果已经存在CDM层数据,不允许ADS应用层跨过CDM中间层从ODS层重复加工数据。CDM中间层应该积极了解应用层数据的建设需求,将公用的数据沉淀到公共层,为其他数据层次提供数据服务。同时,ADS应用层也需积极配合CDM中间层进行持续的数据公共建设的改造。避免出现过度的ODS层引用、不合理的数据复制和子集合冗余。总体遵循的层次调用原则如下:
    1、ODS层数据不能直接被应用层任务引用。如果中间层没有沉淀的ODS层数据,则通过CDM层的视图访问。CDM层视图必须使用调度程序进行封装,保持视图的可维护性与可管理性。
    CDM层任务的深度不宜过大(建议不超过10层)。
    2、一个计算刷新任务只允许一个输出表,特殊情况除外。
    3、如果多个任务刷新输出一个表(不同任务插入不同的分区),DataWorks上需要建立一个虚拟任务,依赖多个任务的刷新和输出。通常,下游应该依赖此虚拟任务。
    4、CDM汇总层优先调用CDM明细层,可累加指标计算。CDM汇总层尽量优先调用已经产出的粗粒度汇总层,避免大量汇总层数据直接从海量的明细数据层中计算得出。
    5、CDM明细层累计快照事实表优先调用CDM事务型事实表,保持数据的一致性产出。
    6、有针对性地建设CDM公共汇总层,避免应用层过度引用和依赖CDM层明细数据。

5.2 数仓构建流程

整体构建流程
  • 数据调研
    -1. 业务调研:
    ①熟悉业务流程:明确每个现实业务的具体流程,拆分为抽象的业务过程(不可拆分的行为事件)
    ②熟悉业务数据:将数据与业务过程对应起来,明确每个业务过程对哪些表的数据产生哪些影响(具体到对表、数据条目的操作逻辑)
    -2. 需求分析:
    明确需求所需的业务过程及维度
    考虑三个问题,帮助分析
    -业务数据是根据什么(维度、粒度)汇总的,衡量标准是什么?例如,成交量是维度,订单数是成交量的度量。
    -明细数据层和汇总数据层应该如何设计?公共维度层该如何设计?是否有公共的指标?
    -数据是否需要冗余或沉淀到汇总数据层中?

  • 划分数据域
    数据域是指面向业务分析,将业务过程或者维度进行抽象的集合。
    目的:便于数据的管理和应用
    划分依据:业务过程(一个业务过程只能属于一个数据域)、部门

  • 构建业务总线矩阵
    包含所有事实(业务过程)及维度,以及两者之间的关系。
    矩阵的行是业务过程,列是维度。
    一个业务过程对应一张事务型事实表,一个维度则对应一张维度表。

  • 明确统计指标
    1、原子指标 = 业务过程 + 度量值 + 聚合逻辑
    2、派生指标 = 原子指标 + 统计周期 + 业务限定(修饰词) + 统计粒度(groupBy)
    3、衍生指标 = 在一个或多个派生指标的基础上计算而来
    4、 指标体系意义:
    大多数需求都之间或间接对应一个或多个派生指标,那么,当需求足够多时,必然出现部分统计需求对应的派生指标相同的情况。这种情况下,考虑将公共的派生指标保存下来,减少重复计算,提高数据的复用性。
    公共的平派生指标统一保存在数仓的DWS层

  • 维度模型设计
    构建业务总线矩阵的过程就是设计维度模型的过程。但是需要注意的是,总线矩阵中通常只包含事务型事实表,另外两种类型的事实表需单独设计。
    事实表存储在DWD层
    维度表存在DIM层

  • 汇总模型设计
    汇总模型的设计参考上述整理出的指标体系(主要是派生指标)即可。
    汇总表与派生指标的对应关系是:一张汇总表通常包含业务过程相同、统计周期相同、统计粒度相同的多个派生指标。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,492评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,048评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,927评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,293评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,309评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,024评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,638评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,546评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,073评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,188评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,321评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,998评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,678评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,186评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,303评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,663评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,330评论 2 358

推荐阅读更多精彩内容