数仓维度建模之维度表技术基础

01 维度表结构

组成结构:

主键 + 维度属性

名词解释:

主键:作⽤是与事实表的外键进⾏关联。

维度属性:是⽤于描述维度特性的字段,⼀般作为 group by分组查询的条件。

举个例⼦:

时间维度表 时间id在时间维度表⾥作为主键存在,事实表中也存 在⼀个时间id与之关联,得到时间维度的⼀些维度属性

02 ⼀致性维度

概念:

当不同的维度表的属性具有相同列名和领域内容时, 称维度表具有⼀致性。利⽤⼀致性属性与每个事实表 关联,可将来⾃不同事实表的信息合并到同⼀报表 中。

理解:

在总线架构设计时,可能会在多个数据集市中都存在 相同的维度,为了使这些数据集市的维度统⼀,就产 ⽣了⼀致性维度。

两个维度如果有关系,要么就是完全⼀样的,要么就 是⼀个维度在数学意义上是另⼀个维度的⼦集。

⼀致性维度的内容和普通维度并没有本质上区别,都 是经过数据清洗和整合后的结果。

举个例⼦:

⽤⼾维度表 ⼀共有3个来源的⽤⼾基础数据,⼀个是来源腾讯课 堂⽤⼾,⼀个来源于⼩鹅通⽤⼾,⼀个来源于⾃⼰平台的⽤⼾数据。在总线架构设计时,⽤⼾维度表作为 我们各主题库的公共维度,需要保持⼀致性原则,汇 总成⼀张维度表。

1、统⼀标识 ⾸先定义统⼀标识(zhihu_id)⽤⼾,进⾏编码⽅ 式、数据格式的统⼀。

2、匹配不同数据源 将 3 个 不 同 数 据 源 的 ⽤ ⼾ 编 码 分 别 与 ⽤ ⼾ 统 ⼀ 标 识 (zhihu_id)进⾏匹配,可以根据⾃⼰平台的uid、 微信的union_id或者⼿机号进⾏匹配,最终来源于 不同数据源的⽤⼾只存⼀条数据,对⽤⼾进⾏了统 ⼀,后期根据⽤⼾属性分组查询都可关联这张⽤⼾维 度表,即实现了维度的⼀致性。

03 维度代理键

概念:

维度表中的主键,不是操作系统的⾃然键,因为维度 的⾃然键可能由多个源系统建⽴,会出现兼容问题,所以需要⼀个代理键,进⾏维度的统⼀,⼀般是由1 开始的数值类型组成。

举个例⼦:

去 年 IPhone12 的 标 价 是 649 美 元 , 但 今 年 变 成 了 749美元。在订单系统中,只要在主产品清单⾥将标 签才从649美元改成749美元,新的订单就会使⽤新 的价格。

在 数 据 仓 库 中 , 则 需 要 考 虑 历 史 因 素 。 假 设 IPhone12总是按749美元销售的还是反映去年的价 格是649美元的相关情况。如果简单的使⽤应⽤程序 键来代替IPhone12就没有过多的选择。

然⽽,如果有预⻅性的为该产品创建了代理键,当标 价变化时,只需要⽤新的代理键来创建新的记录,来 表⽰完全相同但只是更贵的IPhone12,同时将应⽤ 程序键作为另⼀个属性保存。对单个产品、顾客或其 他维度成员来创建多个实例(instance),这得益 于代理键的使⽤。

⽇期维度不需要遵守代理键规则,因为⽇期维度上⾼ 度可预测的且稳定的维度。

04 维度下钻

下钻可以理解成增加维的层次,从⽽可以由粗粒度到 细粒度来观察数据。 ⽐如对产品销售情况分析时,可以沿着时间维从年到 ⽉到⽇更细粒度的观察数据;对⽤⼾分布情况分析 时,可以按照地域维度从省到市到区更细粒度的分 析。

05 退化维度

理解:

将维度退化到事实表中,减少事实表和维度表的关 联。

退化维度⼀般都是事务的编号,如订单编号、发票编 号等。这类编号需要保存到事实表中,但是不需要对 应的维度表,所以称为退化维度。

退化维度经常会和其他⼀些维度⼀起组合成事实表的 主键。事实表应该保存最细粒度的数据,所以对于销 售这样的事实表来说,需要销售单编号和产品来共同 作为主键,⽽不能⽤销售⽇期、商场、产品等⽤来分 析的维度共同作为主键。 退化维度在分析中可以⽤来做分组使⽤。它可以将同 ⼀个事务中销售的产品集中在⼀起。

因为事实表主键的成员⼀般都是维度值所组成,但退 化维度虽然也属于主键值,但没有单独的维度表,所以 叫退化维度。

06 缓慢变化维

概念:

随着时间可能会缓慢变化的维度,就是缓慢变化维。 并且把处理维度表的历史变化信息的问题称为处理缓 慢变化维的问题,有时也简称为处理SCD的问题。

举个例⼦:

假设有这样⼀条数据:

id name city
1001 张三 北京

现在张三离开北京,前往深圳分公司⼯作,所以需要 对city数据进⾏更新,由于城市信息⼀般不会改变, 这种就属于处理缓慢变化维的问题。

3种简单的处理⽅法:
第⼀种:直接覆盖原值

id name city
1001 张三 深圳

这样处理,最容易实现,但是没有保留历史数据,⽆ 法分析历史变化信息

第⼆种:添加维度⾏ 当有维度属性发⽣变化时,⽣成⼀条新的维度记录, 如下:

id name city
1001 张三 北京
1001 张三 深圳

但是这样,当与别的表通过id关联时,有两个1001 的id数据,这样是有问题的;所以就需要代理键的⽀ 持。(在数据仓库的术语⾥⾯,这个唯⼀标识数据仓 库表记录的键我们称之为 Surrogate Key 代理键)

sk_id id name city
001 1001 张三 北京
002 1001 张三 深圳

现在每条数据都唯⼀,但⼜⼀个问题,现在不知道哪 个是当前在⽤的数据,虽然可以通过代理键找最⼤的 (因为主键往往是⾃增的,最⼤的通常是最新的数 据),但某些情况下要插⼊历史数据就不好找了,所以在维度表中加⼊时间序列,⽤NULL来标识哪条是当前最新数据,有变化再进⾏更新。

sk_id id name city start_time end_time
001 1001 张三 北京 2021-09-01 2021-09-04
002 1001 张三 深圳 2021-09-04 NULL

第三种:添加属性列

id name cur_city old_city
1001 张三 深圳 北京

这种⽅式的优点是,可以同时分析当前及前⼀次变化 的属性值 sk_id

总结:在实际建模中,我们可以联合使⽤三种⽅式, 也可以对⼀个维度表中的不同属性使⽤不同的⽅式; 这些都是需要根据实际情况来决定,但⽬的都是⼀样 的,就是能够⽀持⽅便的分析历史变化情况。

07 杂项维度

概念:

杂项维度是对低粒度标志和指标的分组。与其为每个 标识或属性定义不同的维度,不如建⽴单独的将不同 维度合并到⼀起的杂项维度。并不是所有属性可能值 的笛卡尔积都是需要的,只需要业务实际中发⽣的情 况的合并值。

举个例⼦:

⽐ 如 不 同 的 字 段 , 假 如 有 3 个 : 是 否 学 ⽣ , 是 否 运 动,是否南⽅⼈,这三个字段的枚举值按照实际发⽣ 在元数据中的值进⾏拼接到⼀个字段或者分别作为三 个字段在⼀⾏中呈现(应该是有9种组合)。

--------------------------------------------------------- END -----------------------------------------------------------------

我是⼩码良,5年⼤数据开发经验,⼤数据架构师, 从0到1搭建数仓经验丰富。现在在做离线数仓和内 容推荐相关内容,欢迎⼀起交流学习、⽣活各⽅⾯的 问题,⼀起加油进步! 我们微信交流群还在建设当中,⾥⾯包括BAT等⾏业 ⼤佬,在⻛趣幽默的交流同时,提升⾃⼰对⾏业内新 技术以及主流技术的认知和了解。
要想获取更多的大数据相关内容,敬请关注微信公众号’小码良’

数仓维度建模之维度表技术基础相关推荐

  1. 数据仓库知识点总结(数仓分层建模、维度建模等)

    数据仓库知识点总结 推荐学习<华为数据之道><数据仓库工具箱-维度建模权威指南>两本书. 此文档是数据仓库建模的知识点总结文档,在持续更新中(2021-10-13). 文章目录 ...

  2. 【电商数仓】关系建模与维度建模、维度表和事实表、几种维度模型、数仓建模原则

    文章目录 1 关系建模与维度建模 (1)关系建模 (2) 维度建模 2 维度表和事实表 (1)维度表 (2)事实表 事务型事实表 周期型快照事实表 累积型快照事实表 3 维度模型分类 (1)星型模型 ...

  3. 大数据基础知识——数仓的搭建(维度建模)

    数据仓库 文章目录 数据仓库 数据仓库的介绍: 数据仓库的概念: OLTP和OLAP区别: 数据仓库的特点: 面向主题: 数据集成: 非易失: 时变: 数据仓库系统架构 系统结构图 源数据 ETL 数 ...

  4. 数仓 DW层中主题表之页面交互事件概况主题(分享,点赞,收藏)

    数仓 DW层中主题表之页面交互事件概况主题(分享,点赞,收藏) 1. 背景 在大数据开发中,本身的数据处理分析目的一般就是2类,一个是基于现有数据找出规律,做总结和分类统计.一个是基于现有数据找出规律 ...

  5. 吴乙己的数仓指南_5.1维度建模技巧之SCD2类型缓慢变化维搭建

    目录 0.引言 1.SCD类型 2.举个栗子 3.SCD2 3.1 什么是SCD2 3.2 如何使用SCD2 3.3 如何实现SCD2 3.3.1 获取维度基准 3.3.2 按情况分治打标 3.3.3 ...

  6. 【HBZ分享】数仓里面的概念-宽表-维度表-事实表概念讲解

    数仓概念 1. 度量值: 可被统计的,比如:次数,销量,营销额,订单表中的下单金额等可以统计的值叫度量值2. 维度表:(1). 对事实描述的信息,每一张表都对应现实世界中的一个对象或概念,比如:用户, ...

  7. 数仓范式建模、ER实体建模和维度建模

    范式建模 3NF 第一范式:保证每列的原子性.即数据库表中的所有字段值都是不可分解的原子值. 第二范式:保证一张表只描述一件事情.即除主键外其他字段完全依赖于主键. 第三范式:不可传递依赖.即表中的字 ...

  8. 数据仓库建模方法/范式建模法/维度建模法/事实表/维度表/优缺点/建模流程/概念建模/逻辑建模/物理建模

    常见的有 范式建模法.维度建模法.实体建模法等,每种方法从本质上将是从不同的角度看待业务中的问题,不管是从技术层面还是从业务层面,都代表了哲学上的一种世界观. 1 范式建模法(Third Normal ...

  9. 维度建模的事实表设计

    事实表基础 事实表特性 事实表作为数据仓库维度建模的核心,紧紧围绕着业务过程来设计,通过获取描述业务过程的度量来表达业务过程,包含了引用的维度和与业务过程有关的度量. 事实表中一条记录所表达的业务细节 ...

最新文章

  1. pytorch使用gpu就是这么简单
  2. 传入json对象_【Python基础】可迭代对象amp;迭代器对象及其实现
  3. GRE tunnel源码分析之发送流程
  4. 理想的 ASP.NET AJAX (Part 1 - Client Centric)
  5. 音频光端机的必备要素有哪些?
  6. 大陆集团:放弃内燃机,适用于高阶自动驾驶MK C1制动系统2020年国内投产
  7. 三种方法实现二分查找
  8. java如果文件存在则删除_Java删除文件(如果存在)的更好方法
  9. 用计算机知识写祝福,计算机课程设计心得体会
  10. echarts2 饼图标签文字换行
  11. GIS公司的主要业务
  12. linux 复制文件加后缀,linux shell 取文件名后缀
  13. DC-1详解(绝对的详细!)
  14. 大学计算机专业分为哪几类
  15. android 字体设置为中等粗细
  16. 微信新动作!加好友解除5000上限,扫码进群开放至200人
  17. PHP头条爬虫,今日头条爬虫分析-爬取用户发的所有内容
  18. C语言编程学习:使用函数必须知道的3点注意事项
  19. Java代码审计——WebGoat CSRF (上)
  20. was ist dann los?

热门文章

  1. 美超微推出4U人工智能推论优化新GPU服务器
  2. matlab压缩感知,压缩感知(Compressed Sensing, CS)matlab代码
  3. 程序员工作中的三个锦囊
  4. Javadoc注释编写入门
  5. 2.0 ros2常用命令与git指令
  6. 用python画图所需要的插件_一种不需要敲代码的Python 画图方法
  7. phpcms 搜索功能二开
  8. db2时间差换成月_DB2 时间计算差
  9. 关于JavaSwing表格部件的表格数据的刷新解决方法
  10. Node.js v13 window7