【离线数仓-3-数仓建模方法理论汇总】

news2024/11/30 8:49:33

离线数仓-3-数仓建模方法理论汇总

  • 离线数仓-3-数仓建模方法理论汇总
    • 1.数仓概述
    • 2.数据仓库核心架构(Hive)
    • 3.数据仓库建模概述
    • 4.数据仓库建模方法论
      • 1.ER(Entity Relationship)模型
      • 2.维度模型
        • 1.维度建模理论-事实表
          • 1. 事实表概述
          • 2.事实表分类
            • 1.事务事实表
            • 2.周期型快照事实表
            • 3.累计型快照事实表
        • 2.维度建模理论-维度表
          • 1.维度表概述
          • 2.维度表设计步骤
          • 3.维度表设计要点
      • 3.各种表格同步策略

离线数仓-3-数仓建模方法理论汇总

1.数仓概述

  • 数据仓库具备能力:数据存储能力、管理数据能力、数据分析计算能力。
  • 官方介绍:数据仓库是一个为数据分析而设计的企业级数据管理系统。
  • 数仓存在意义:数据仓库可集中、整合多个信息源的大量数据,借助数据仓库的分析能力,企业可从数据中获取宝贵的信息进而改进决策。

2.数据仓库核心架构(Hive)

  • 重点:数仓建模+写sql
    在这里插入图片描述

3.数据仓库建模概述

  • 数据模型:是数据组织和存储方法,他强调从业务、数据存储和使用角度合理存储数据。
  • 数据仓库建模的意义:只有将数据有序的组织和存储起来之后,数据才能得到高性能、低成本、高效率、高质量的使用。
    • 高性能:良好的数据模型能够帮助我们快速查询所需要的数据。
    • 低成本:良好的数据模型能减少重复计算,实现计算结果的复用,降低计算成本。
    • 高效率:良好的数据模型能极大的改善用户使用数据的体验,提高使用数据的效率。
    • 高质量:良好的数据模型能改善数据统计口径的混乱,减少计算错误的可能性。

4.数据仓库建模方法论

1.ER(Entity Relationship)模型

  • 数据仓库之父Bill Inmon提出的建模方法是从全企业的高度,用实体关系(Entity Relationship,ER)模型来描述企业业务,并用规范化的方式表示出来,在范式理论上符合3NF。
    3范式(3NF)

  • 实体关系模型将复杂的数据抽象为两个概念——实体和关系。实体表示一个对象,例如学生、班级,关系是指两个实体之间的关系,例如学生和班级之间的从属关系。

  • 数据库规范化是使用一系列范式设计数据库(通常是关系型数据库)的过程,其目的是减少数据冗余,增强数据的一致性。

    • 这一系列范式就是指在设计关系型数据库时,需要遵从的不同的规范。关系型数据库的范式一共有六种,分别是第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF)。遵循的范式级别越高,数据冗余性就越低。
  • ER模型方法的出发点是整合数据,其目的是将整个企业的数据进行组合和合并,并进行规范处理,减少数据冗余性,保证数据的一致性。这种模型并不适合直接用于分析统计。

  • ER模型的样例:
    在这里插入图片描述

2.维度模型

  • 维度模型将复杂的业务通过事实维度两个概念进行呈现。

    • 事实通常对应业务过程;
    • 维度通常对应业务过程发生时所处的环境;
    • 注:业务过程可以概括为一个个不可拆分的行为事件,例如电商交易中的下单,取消订单,付款,退单等,都是业务过程。
  • 维度建模以数据分析作为出发点,为数据分析服务,因此他关注的重点的用户如何更快的完成需求分析以及如何实现较好的大规模复杂查询的响应性能。

  • 维度模型的样例:
    在这里插入图片描述

1.维度建模理论-事实表

1. 事实表概述
  • 事实表作为数据仓库维度建模的核心,仅仅围绕着业务过程来设计。其包含与该业务过程有关的维度引用(维度表外键)以及该业务过程的度量(通常是可累加的数字类型字段) 。
  • 事实表有两大核心字段类型:维度外键,度量值
  • 特点:事实表通常比较“细长”,列比较少,行比较多,并且行增速快。
2.事实表分类

事实表分为三类:事务事实表、周期快照事实表、累计快照事实表,每种表格适应的场景不同,其中事务事实表应用最普遍。

1.事务事实表
  • 1.概述:
    • 事务事实表用来记录各业务过程,它保存的是各个业务过程的原子操作事件,即最细粒度的操作事件。
      • 粒度:指事实表中一行数据所表达的业务细节程度。
    • 事务事实表 用于分析各业务过程 相关的各项统计指标,由于其保存了最细粒度的记录,可提供最大限度的灵活性,这样就可以支持无法预期的各种细节层次的统计需求。
  • 2.设计流程
    事实事务表设计流程大概分为4步:选择业务过程 --> 声明粒度 --> 确认维度–> 确认事实
    • 1.选择业务过程
      在业务系统中,挑选我们感兴趣的业务过程,业务过程可以概括为一个个不可拆分的行为事件,例如电商交易中的下单,取消订单,付款,退单等,都是业务过程。通常情况下,一个业务过程对应一张事务型事实表。

    • 2.声明粒度
      业务过程确定后,需要为每个业务过程声明粒度。即精确定义每张事务型事实表的每行数据表示什么,应该尽可能选择最细粒度,以此来应各种细节程度的需求。

    • 3.确认维度
      确定维度具体是指,确定与每张事务型事实表相关的维度有哪些。
      确定维度时应尽量多的选择与业务过程相关的环境信息。因为维度的丰富程度就决定了维度模型能够支持的指标丰富程度。

    • 4.确认事实
      此处的“事实”一词,指的是每个业务过程的度量值(通常是可累加的数字类型的值,例如:次数、个数、件数、金额等)。

    • 经过上述四个步骤,事务型事实表就基本设计完成了。第一步选择业务过程可以确定有哪些事务型事实表,第二步可以确定每张事务型事实表的每行数据是什么,第三步可以确定每张事务型事实表的维度外键,第四步可以确定每张事务型事实表的度量值字段。

  • 3.事务事实表的不足之处
    • 对于存量型指标这种场景的数据进行计算的时候,有时候会涉及到全表的全部记录,性能消耗比较大,不建议使用事务事实表来对存量型指标进行计算。
    • 对于多事务关联统计,这样的指标,不建议使用事务事实表,因为两个表进行关联的时候,就是大表跟大表进行join,尽量避免这种情况。
2.周期型快照事实表
  • 1.概述
    • 周期快照事实表,实际上类似于Hive中按天做分区,然后全量拉取mysql中数据,这样就会形成mysql的快照。
    • 主要用于分析一些存量型(商品库存、账户余额)或状态型(空气温度、行驶速度)指标,对于存量型指标的查询,直接查询mysql同步来的快照数据中关于存量数据的表,不需要再进行事务事实表之间的关联。
      • 对于商品库存、账户余额这些存量型指标,业务系统中通常就会计算并保存最新结果,所以定期同步一份全量数据到数据仓库,构建周期型快照事实表,就能轻松应对此类统计需求,而无需再对事务型事实表中大量的历史记录进行聚合了。
      • 对于空气温度、行驶速度这些状态型指标,由于它们的值往往是连续的,我们无法捕获其变动的原子事务操作,所以无法使用事务型事实表统计此类需求。而只能定期对其进行采样,构建周期型快照事实表。
  • 2.设计流程
    • 1)确定粒度
      周期型快照事实表的粒度可由采样周期和维度描述,故确定采样周期和维度后即可确定粒度。
      采样周期通常选择每日。
      维度可根据统计指标决定,例如指标为统计每个仓库中每种商品的库存,则可确定维度为仓库和商品。
      确定完采样周期和维度后,即可确定该表粒度为每日-仓库-商品。
    • 2)确认事实
      事实也可根据统计指标决定,例如指标为统计每个仓库中每种商品的库存,则事实为商品库存。
  • 3.事实类型
    此处的事实类型是指度量值的类型,而非事实表的类型。事实(度量值)共分为三类,分别是可加事实,半可加事实和不可加事实。
    • 1)可加事实
      可加事实是指可以按照与事实表相关的所有维度进行累加,例如事务型事实表中的事实。
    • 2)半可加事实
      半可加事实是指只能按照与事实表相关的一部分维度进行累加,例如周期型快照事实表中的事实。以上述各仓库中各商品的库存每天快照事实表为例,这张表中的库存事实可以按照仓库或者商品维度进行累加,但是不能按照时间维度进行累加,因为将每天的库存累加起来是没有任何意义的。
    • 3)不可加事实
      不可加事实是指完全不具备可加性,例如比率型事实。不可加事实通常需要转化为可加事实,例如比率可转化为分子和分母。
3.累计型快照事实表
  • 1.概述

    • 累计快照事实表是基于一个业务流程中的多个关键业务过程联合处理而构建的事实表,如交易流程中的下单、支付、发货、确认收货业务过程。
    • 累积型快照事实表通常具有多个日期字段,每个日期对应业务流程中的一个关键业务过程(里程碑)。
    • 累积型快照事实表主要用于分析业务过程(里程碑)之间的时间间隔等需求。例如前文提到的用户下单到支付的平均时间间隔,使用累积型快照事实表进行统计,就能避免两个事务事实表的关联操作,从而变得十分简单高效。
  • 2.设计流程

    • 1)选择业务过程
      选择一个业务流程中需要关联分析的多个关键业务过程,多个业务过程对应一张累积型快照事实表。
    • 2)声明粒度
      精确定义每行数据表示的是什么,尽量选择最小粒度。
    • 3)确认维度
      选择与各业务过程相关的维度,需要注意的是,每各业务过程均需要一个日期维度。
    • 4)确认事实
      选择各业务过程的度量值。

2.维度建模理论-维度表

1.维度表概述

维度表是维度建模的基础和灵魂。前文提到,事实表紧紧围绕业务过程进行设计,而维度表则围绕业务过程所处的环境进行设计。维度表主要包含一个主键和各种维度字段,维度字段称为维度属性。

2.维度表设计步骤
  • 1)确定维度(表)
    在设计事实表时,已经确定了与每个事实表相关的维度,理论上每个相关维度均需对应一张维度表。需要注意到,可能存在多个事实表与同一个维度都相关的情况,这种情况需保证维度的唯一性,即只创建一张维度表。另外,如果某些维度表的维度属性很少,例如只有一个名称,则可不创建该维度表,而把该表的维度属性直接增加到与之相关的事实表中,这个操作称为维度退化*。
  • 2)确定主维表和相关维表
    此处的主维表和相关维表均指业务系统中与某维度相关的表。例如业务系统中与商品相关的表有sku_info,spu_info,base_trademark,base_category3,base_category2,base_category1等,其中sku_info就称为商品维度的主维表,其余表称为商品维度的相关维表。维度表的粒度通常与主维表相同,主维表通常是粒度最细的表。
  • 3)确定维度属性
    • 确定维度属性即确定维度表字段。维度属性主要来自于业务系统中与该维度对应的主维表和相关维表。维度属性可直接从主维表或相关维表中选择,也可通过进一步加工得到。
    • 确定维度属性时,需要遵循以下要求:
      • (1)尽可能生成丰富的维度属性
        维度属性是后续做分析统计时的查询约束条件、分组字段的基本来源,是数据易用性的关键。维度属性的丰富程度直接影响到数据模型能够支持的指标的丰富程度。
      • (2)尽量不使用编码,而使用明确的文字说明,一般可以编码和文字共存。
      • (3)尽量沉淀出通用的维度属性
        有些维度属性的获取需要进行比较复杂的逻辑处理,例如需要通过多个字段拼接得到。为避免后续每次使用时的重复处理,可将这些维度属性沉淀到维度表中。
3.维度表设计要点
  • 1.规范化与反规范化
    • 规范化是指使用一系列范式设计数据库的过程,其目的是减少数据冗余,增强数据的一致性。通常情况下,规范化之后,一张表的字段会拆分到多张表。
    • 反规范化是指将多张表的数据冗余到一张表,其目的是减少join操作,提高查询性能。在设计维度表时,如果对其进行规范化,得到的维度模型称为雪花模型,如果对其进行反规范化,得到的模型称为星型模型。
    • 数据仓库系统的主要目的是用于数据分析和统计,所以是否方便用户进行统计分析决定了模型的优劣。采用雪花模型,用户在统计分析的过程中需要大量的关联操作,使用复杂度高,同时查询性能很差,而采用星型模型,则方便、易用且性能好。所以出于易用性和性能的考虑,维度表一般是很不规范化的

在这里插入图片描述

  • 2.维度变化
    维度属性通常不是静态的,而是会随时间变化的,数据仓库的一个重要特点就是反映历史的变化,所以如何保存维度的历史状态是维度设计的重要工作之一。保存维度数据的历史状态,通常有以下两种做法,分别是全量快照表和拉链表。

    • 1.全量快照表

      • 离线数据仓库的计算周期通常为每天一次,所以可以每天保存一份全量的维度数据。这种方式的优点和缺点都很明显。
      • 优点是简单而有效,开发和维护成本低,且方便理解和使用。
      • 缺点是浪费存储空间,尤其是当数据的变化比例比较低时。
    • 2.拉链表

      • 1.拉链表的意义:就在于能够更加高效的保存维度信息的历史状态。

      • 2.拉链表是什么:拉链表,记录每条信息的生命周期,一旦一条记录的生命周期结束,就重新开始一条新的记录,并把当前日期放入生效开始日期。
        在这里插入图片描述

      • 3.为什么要做拉链表:极大地减少了存储空间

        • 拉链表适合于:数据会发生变化,但是变化频率并不高的维度(即:缓慢变化维
          在这里插入图片描述
      • 4.如何使用拉链表:

        • 通过sql处理,生效开始日期 <= 某个日期 且 生效结束日期 >= 某个日期,能够得到某个时间点的数据全量切片。
          在这里插入图片描述
  • 3.多值维度

    • 如果事实表中一条记录在某个维度表中有多条记录与之对应,称为多值维度。例如,下单事实表中的一条记录为一个订单,一个订单可能包含多个商品,所会商品维度表中就可能有多条数据与之对应。
    • 针对这种情况,通常采用以下两种方案解决。
      • 第一种:降低事实表的粒度,例如将订单事实表的粒度由一个订单降低为一个订单中的一个商品项。
      • 第二种:在事实表中采用多字段保存多个维度值,每个字段保存一个维度id。这种方案只适用于多值维度个数固定的情况。
      • 建议尽量采用第一种方案解决多值维度问题。
  • 4.多值属性

    • 维表中的某个属性同时有多个值,称之为“多值属性”,例如商品维度的平台属性和销售属性,每个商品均有多个属性值。
    • 针对这种情况,通常有可以采用以下两种方案。
      • 第一种:将多值属性放到一个字段,该字段内容为key1:value1,key2:value2的形式,例如一个手机商品的平台属性值为“品牌:华为,系统:鸿蒙,CPU:麒麟990”。
      • 第二种:将多值属性放到多个字段,每个字段对应一个属性。这种方案只适用于多值属性个数固定的情况。

3.各种表格同步策略

  • 绝大多数维度表一般采用:全量同步
    • 全量快照表:全量同步
    • 拉链表: 增量同步
  • 绝大多数事实表一般采用:增量同步
    • 所有的事务事实表,通常采用增量同步
    • 周期快照事实表,采用全量同步
    • 累计快照事实表,采用增量同步
  • 有特殊的表格可能全量同步和增量同步都采用,例如:有的表格既要做周期型快照事实表又要做周期型快照事实表,此时,该表格既要做全量同步又要做增量同步。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/363615.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RabbitMQ学习(十):发布确认高级

一、概述在生产环境中由于一些不明原因&#xff0c;导致 RabbitMQ 重启&#xff0c;在 RabbitMQ 重启期间生产者消息投递失败导致消息丢失&#xff0c;需要手动处理和恢复。在这样比较极端的情况&#xff0c;当RabbitMQ 集群不可用的时候&#xff0c;无法投递的消息该如何处理呢…

面试题:HashMap为什么是线程不安全的?解决办法是什么?

在JDK1.7中容易造成死循环和数据丢失&#xff0c;造成的原因如下图假设某个时刻t1,t2都访问到了链表&#xff0c;t1,t2的下一个节点都是b,如图此时内存耗尽&#xff0c;线程t2线程进入等待状态&#xff0c;假设此时刚好达到临界点需要扩容&#xff0c;t1进行扩容&#xff0c;并…

【20230210】二叉树小结

二叉树的种类二叉树的主要形式&#xff1a;满二叉树和完全二叉树。满二叉树深度为k&#xff0c;有2^k-1个节点的二叉树完全二叉树除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面一层的节点都集中在该层最左边的若干位置。二叉搜索树…

浅谈毫米波技术与应用

浅谈毫米波之技术篇2020年10月GSMA发布的《5G毫米波技术白皮书》预计&#xff0c;在2022年北京冬奥会上&#xff0c;5G毫米波有望大放异彩&#xff0c;为观众、媒体转播者、赛事组织和参与者等提供优质的观赛体验、完备的服务保障&#xff0c;将可提供全景VR、新型信息交互、智…

SCADA-1-组态前期需求调研篇

近期有朋友找到我&#xff0c;说scada组态系统开源的很少&#xff0c;不少开发者借此售卖这种软件&#xff0c;我回了句&#xff1a;这有什么难的&#xff0c;不就是拖拖拽拽&#xff0c;再绑定上数据源&#xff0c;实现动态效果嘛。。。&#xff08;先装了个X&#xff09;一、…

Web前端:全栈开发人员的责任

多年来&#xff0c;关于全栈开发人员有很多说法&#xff0c;全栈开发人员是一位精通应用程序全栈开发过程的专业人士。这包括数据库、API、前端技术、后端开发语言和控制系统版本。你一定遇到过前端和后端开发人员。前端开发人员将构建接口&#xff0c;而后端开发人员将开发、更…

使用 Xcode 创建第一个 Objective-C 命令行程序 HelloWorld

总目录 iOS开发笔记目录 从一无所知到入门 文章目录创建项目运行项目&#xff0c;查看日志输出同一项目下新增子目录&#xff0c;切换要运行的 Target创建项目 打开 Xcode &#xff0c;Create a new Xcode project 接下来的默认界面&#xff1a; 切换到 macOS 下&#xff…

攻击者失手,自己杀死了僵尸网络 KmsdBot

此前&#xff0c;Akamai 的安全研究员披露了 KmsdBot 僵尸网络&#xff0c;该僵尸网络主要通过 SSH 爆破与弱口令进行传播。在对该僵尸网络的持续跟踪中&#xff0c;研究人员发现了一些有趣的事情。 C&C 控制 对恶意活动来说&#xff0c;最致命的就是夺取对 C&C 服务…

后端基础SQL

SQL基础语法: sql对大小写不敏感&#xff0c;eg: SELECT 等效于 select&#xff1b;select: select用于从表中查找数据&#xff0c;select 列名 from 表名 —> 结果集:&#xff1a;仅有查询列的结果表&#xff1b; SELECT * FROM 表名称 ----> 结果集: 查找表的所有数据…

你是客户喜欢的那类外贸业务员吗

某天&#xff0c;一个智利的客户发了一封邮件来&#xff0c;只为了告诉我一个好消息——他的产品进入了 Walmart。01以下是他的原文&#xff1a;Hi Sam,Just for you to know, that 2-3 month ago, We take part in a bidding, and we win with the clip caps.They buy 400-500…

深入浅出C++ ——set类深度剖析

文章目录一、关联式容器二、键值对三、树形结构的关联式容器四、set类介绍六、set的使用七、multiset一、关联式容器 STL中的部分容器&#xff0c;比如&#xff1a;vector、list、deque、forward_list(C11)等&#xff0c;这些容器统称为序列式容器&#xff0c;因为其底层为线性…

如何解决过拟合与欠拟合,及理解k折交叉验证

模型欠拟合&#xff1a;在训练集以及测试集上同时具有较⾼的误差&#xff0c;此时模型的偏差较⼤&#xff1b; 模型过拟合&#xff1a;在训练集上具有较低的误差&#xff0c;在测试集上具有较⾼的误差&#xff0c;此时模型的⽅差较⼤。 如何解决⽋拟合&#xff1a; 添加其他特…

【蓝桥杯集训8】哈希表专题(3 / 3)

目录 手写哈希表 1、开放寻址法 2、拉链法 字符串前缀哈希表法 2058. 笨拙的手指 - 哈希表 秦九韶算法&#xff08;进制转换&#xff09; 枚举 秦九韶算法——将x进制数转化为十进制数 手写哈希表 活动 - AcWing 1、开放寻址法 设 h(x)k&#xff0c;也就是 x 的哈希值…

TPM 2.0实例探索2 —— LUKS磁盘加密(3)

接前文&#xff1a;TPM 2.0实例探索2 —— LUKS磁盘加密&#xff08;2&#xff09; 本文大部分内容参考&#xff1a; Code Sample: Protecting secret data and keys using Intel Platform... 二、LUKS磁盘加密实例 3. 将密码存储于TPM的LUKS 由于自动挂载需要在运行时提供一…

Java中的Stack与Queue

文章目录一、栈的概念及使用1.1 概念1.2 栈的使用1.3 栈的模拟实现二、队列的概念及使用2.1 概念2.2 队列的使用2.3 双端队列(Deque)三、相关OJ题3.1 用队列实现栈。3.2 用栈实现队列。总结一、栈的概念及使用 1.1 概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在…

【Git】码云

目录 5、 Git 团队协作机制 5.1 团队内协作 5.2 跨团队协作 6、 Gitee码云 操作 6.1 创建远程仓库 6.2 远程仓库操作 6.3 SSH 免密登录 5、 Git 团队协作机制 5.1 团队内协作 5.2 跨团队协作 6、 Gitee码云 操作 码云网址&#xff1a; https://githee.com/ 账号验证…

【0基础学爬虫】爬虫基础之HTTP协议的基本原理介绍

大数据时代&#xff0c;各行各业对数据采集的需求日益增多&#xff0c;网络爬虫的运用也更为广泛&#xff0c;越来越多的人开始学习网络爬虫这项技术&#xff0c;K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章&#xff0c;为实现从易到难全方位覆盖&#xff0c;特设【0基础学…

干货 | 中小企业选型 Elasticsearch 避坑指南

1、线上常见问题在我线下对接企业或线上交流的时候&#xff0c;经常会遇到各种业务场景不同的问题。比如&#xff0c;常见问题归类如下&#xff1a;常见问题1&#xff1a;ES 适合场景及架构选型问题。公司的核心业务是做企业员工健康管理&#xff0c;数据来自电子化后的员工体检…

【学习总结】相机与IMU标定一:Kalibr论文

论文&#xff1a;2013IROS论文&#xff0c;Unified Temporal and Spatial Calibration for Multi-Sensor Systems&#xff0c;是Kalibr工具的参考论文之一。介绍了如何进行IMU与相机标定。 参考的一篇资料&#xff1a;知乎&#xff1a;超全汇总&#xff01;多传感器离线/在线时…

Java【二叉树】相关知识+基本操作

文章目录前言一、树形结构1.树的定义2.树的概念&#xff08;术语&#xff09;3.树的存储结构二、二叉树1.二叉树的概念两种特殊的二叉树2.二叉树的性质3.二叉树的存储结构4.二叉树的基本操作4.1 二叉树的前序遍历--Preorder Traversal4.2 二叉树的中序遍历--Inorder Traversal4…