数仓维度建模之维度表技术基础
数仓维度建模之维度表技术基础
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等⾏业 ⼤佬,在⻛趣幽默的交流同时,提升⾃⼰对⾏业内新 技术以及主流技术的认知和了解。
要想获取更多的大数据相关内容,敬请关注微信公众号’小码良’
数仓维度建模之维度表技术基础相关推荐
- 数据仓库知识点总结(数仓分层建模、维度建模等)
数据仓库知识点总结 推荐学习<华为数据之道><数据仓库工具箱-维度建模权威指南>两本书. 此文档是数据仓库建模的知识点总结文档,在持续更新中(2021-10-13). 文章目录 ...
- 【电商数仓】关系建模与维度建模、维度表和事实表、几种维度模型、数仓建模原则
文章目录 1 关系建模与维度建模 (1)关系建模 (2) 维度建模 2 维度表和事实表 (1)维度表 (2)事实表 事务型事实表 周期型快照事实表 累积型快照事实表 3 维度模型分类 (1)星型模型 ...
- 大数据基础知识——数仓的搭建(维度建模)
数据仓库 文章目录 数据仓库 数据仓库的介绍: 数据仓库的概念: OLTP和OLAP区别: 数据仓库的特点: 面向主题: 数据集成: 非易失: 时变: 数据仓库系统架构 系统结构图 源数据 ETL 数 ...
- 数仓 DW层中主题表之页面交互事件概况主题(分享,点赞,收藏)
数仓 DW层中主题表之页面交互事件概况主题(分享,点赞,收藏) 1. 背景 在大数据开发中,本身的数据处理分析目的一般就是2类,一个是基于现有数据找出规律,做总结和分类统计.一个是基于现有数据找出规律 ...
- 吴乙己的数仓指南_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 ...
- 【HBZ分享】数仓里面的概念-宽表-维度表-事实表概念讲解
数仓概念 1. 度量值: 可被统计的,比如:次数,销量,营销额,订单表中的下单金额等可以统计的值叫度量值2. 维度表:(1). 对事实描述的信息,每一张表都对应现实世界中的一个对象或概念,比如:用户, ...
- 数仓范式建模、ER实体建模和维度建模
范式建模 3NF 第一范式:保证每列的原子性.即数据库表中的所有字段值都是不可分解的原子值. 第二范式:保证一张表只描述一件事情.即除主键外其他字段完全依赖于主键. 第三范式:不可传递依赖.即表中的字 ...
- 数据仓库建模方法/范式建模法/维度建模法/事实表/维度表/优缺点/建模流程/概念建模/逻辑建模/物理建模
常见的有 范式建模法.维度建模法.实体建模法等,每种方法从本质上将是从不同的角度看待业务中的问题,不管是从技术层面还是从业务层面,都代表了哲学上的一种世界观. 1 范式建模法(Third Normal ...
- 维度建模的事实表设计
事实表基础 事实表特性 事实表作为数据仓库维度建模的核心,紧紧围绕着业务过程来设计,通过获取描述业务过程的度量来表达业务过程,包含了引用的维度和与业务过程有关的度量. 事实表中一条记录所表达的业务细节 ...
最新文章
- pytorch使用gpu就是这么简单
- 传入json对象_【Python基础】可迭代对象amp;迭代器对象及其实现
- GRE tunnel源码分析之发送流程
- 理想的 ASP.NET AJAX (Part 1 - Client Centric)
- 音频光端机的必备要素有哪些?
- 大陆集团:放弃内燃机,适用于高阶自动驾驶MK C1制动系统2020年国内投产
- 三种方法实现二分查找
- java如果文件存在则删除_Java删除文件(如果存在)的更好方法
- 用计算机知识写祝福,计算机课程设计心得体会
- echarts2 饼图标签文字换行
- GIS公司的主要业务
- linux 复制文件加后缀,linux shell 取文件名后缀
- DC-1详解(绝对的详细!)
- 大学计算机专业分为哪几类
- android 字体设置为中等粗细
- 微信新动作!加好友解除5000上限,扫码进群开放至200人
- PHP头条爬虫,今日头条爬虫分析-爬取用户发的所有内容
- C语言编程学习:使用函数必须知道的3点注意事项
- Java代码审计——WebGoat CSRF (上)
- was ist dann los?