细说数仓中不同类型的维度
本周给一位同学复盘,被问到了有哪些核心的维度,贷款的五级分类是哪些?结结巴巴犹犹豫豫,说出来及格比较普遍的维度,贷款得五级分类直接不知道,这个就是平时不关注业务得问题,所以大家在平时复习时,一定要多关注业务上得核心点。当然,这些问题不仅考察了对于业务的理解,还考察了维度在实际工作中的应用。在数据仓库的宏伟建筑中,维度建模如同支撑其稳固性的钢筋骨架。而维度表正是这座大厦中定义业务过程语境、提供灵活分析视角的关键构件。理解维度的不同类型及其设计精髓,是构建高效、易用、面向分析数仓的核心能力。今天就来详解一下各种类型的维度。
1.维度与事实的本质区别
在讲维度类型之类,我们先来认识一下维度表和事实表:
事实表 (Fact Table):存储可度量、可加性的业务事件或事务数据(如销售额、点击量、库存数量)。它们是分析的核心对象,通常包含大量行,且与多个维度关联。
维度表 (Dimension Table): 存储描述业务实体或环境的上下文信息(如客户是谁、产品是什么、发生在何时何地)。它们为事实数据提供丰富的分析切片(Slice)和切块(Dice)能力,包含描述性属性(文本、标志、日期等)。
打个比方:想象实表是动词(发生了什么交易?),维度表是名词、形容词、副词(谁?什么?何时?何地?如何?)
数仓中的维度类型多种多样,可以按照不同的方式划分不同的维度类型,以下是一些常见的类型。
2.按维度属性与实体关系划分
2.1 正常维度
所有属性都相关,涉及一个实体,具有业务唯一标识(自然主键),所有属性都依赖于代理主键。例如商品维度,包含商品代码、名称、类别、重量等属性,这些属性都围绕商品这一实体。该维度表属性跟实体相关,具有唯一标识,可根据外键访问其他依赖属性。
CREATE TABLE ds_hive.ch6_t_goods(
id string COMMENT '商品id',
product_name string COMMENT '商品名称',
category string COMMENT '类别',
price string COMMENT '价格',
stock string COMMENT '库存',
release_date string COMMENT '发布日期')
row format delimited fields terminated by '\t'
stored as textfile
;
上面的ds_hive.ch6_t_goods得产品维表,产品的主键为id。我们就可以根据这个逐渐和其他得事实表进行关联。比如订单表、比如供应商属性表。
2.2 杂项维度/垃圾维度
这个可以叫咋项维度,也可以叫做垃圾维度,将多个低基数(取值少)、彼此独立的指示符(Flag)、状态码(Code)、布尔(Boolean)类型的属性从事实表或其他维度表中抽取出来,组合成一个单一的维度表。这些维度属性互不相关,通常是一些“是/否”列或小而不常用的属性。比如是否有效用户、是否大额存款用户、是否积分使用用户等,可创建垃圾维度来存储。这样我们就可以创建一个垃圾维度:
CREATE TABLE ds_hive.ch6_t_user_profrile(
user_id string COMMENT '商品id',
is_youxiao string COMMENT '是否有效',
is_big_dep string COMMENT '是否大额存款',
is_use_jf string COMMENT '是否使用积分',)
stored as orc
;
注意:
杂项维度/垃圾维度始终是静态不变得,就是维度表的数量是固定的。
JUNK直接跟在DIM_后面。对于Y / N列,使用“ IS_…”或“…_FLAG”进行命名。
数据类型是一致的,即对于Y / N列,它可以是bit或CHAR(1),优先选择CHAR(1)
杂项维度是没有业务主键的
2.3 文本维度
用于存储源事务表中较宽的文本列,如果文本列较窄且在事实表级别,可保留在事实表中;若较宽,可单独放在文本维度中。例如:订单ID,交易ID,付款ID。这些字段,如果事实表较窄,可以事实表中,但是表较宽,我们就可以单独放,但如果源事务表具有宽文本列,有两种设计选择。
将此varchar列放在一个维度(称为“文本维度”)中。将其保留在事实表中。
将其保留在事实表中。
CREATE TABLE ds_hive.ch6 t order(
order_id string COMMENT '订单 id',
note string COMMENT '备注')
stored as orc
;
2.4 独特属性维度
所有属性都是事实表本身的属性,而不是特定维度的属性。如基金管理中的持有表,证券的部门、等级、国家等属性,可创建独特属性维度。例如,考虑一个基金中的持有表,其中每个基金,日期的颗粒都是一行。每个基金都具有许多属性,例如部门,分级,国家,币种,资产类别等。从理论上讲,这些属性在各个基金中是一致的。但是事实并非如此,因为可能会被更新。在正常情况下,部门,分级,国家,币种,资产类别都是安全维度的属性。它们实际上是持有事实表的属性。为了正确存储它们,应该创建一个独特的属性维,如下所示:
CREATE TABLE ds_hive.ch6_t_dim_posittion_attr(
posittion_id string COMMENT '基金主键',
class_type string COMMENT '分级',
country string COMMENT '国家',
cy string COMMENT '币种',)
stored as orc
;
3.按维度处理方式划分
3.1 拉链维度表
维度属性会随时间发生变化,如何准确反映历史状态,确保历史事实能与发生时的维度版本正确关联?用于处理数据的全量存储和历史变化,通过记录数据的有效时间区间,实现对历史数据的追溯和查询,常用于需要保留完整历史数据的场景。比如,我们上述的产品表今天是属于a部门的,但是到了明天就是属于b部门了,为了更好的统计每个部门的产品销售情况,我们必须做拉链表来存储变化的产品,当然,我们通常的做法是做分区表,每天 保留一份当天的数据,这也是处理缓慢变化维的常用方法。
CREATE TABLE ds_hive.ch6_t_goods(
id string COMMENT '商品id',
product_name string COMMENT '商品名称',
category string COMMENT '类别',
price string COMMENT '价格',
stock string COMMENT '库存',
release_date string COMMENT '发布日期')
partition by(data_dt string comment'分区字段' ) --加分区字段
stored as orc
;
3.2 快照维度表
记录在某一时间点或时间区间内的数据快照,粒度通常是周期性的,如按天、周、月或季度存储数据,用于记录账户余额、库存水平等度量。此表是拉链维度表的一种衍生。用于变化不频繁,偶尔会看历史数据的场景。
4.按维度数据特点划分
4.1 多层次维度
在同一个维度中存在多个层级的数据结构,层级间有明确的父子关系,每个层级代表一个不同的粒度。如时间维度可从年到季节、季度、月份等;地理维度可从国家到省、城市等。例如地理维度:
CREATE TABLE ds_hive.ch6_t_dim_area_d(
country string COMMENT '国家',
province string COMMENT '省份',
city string COMMENT '城市',
dist string COMMENT '区县')
partition by(data_dt string comment'分区字段' ) --加分区字段
stored as orc
;
4.2 多值属性维度
维度表中的某个属性可以有多个值,如客户维度中的客户联系方式,可能有多个电话号码、邮箱地址等。
5.总结
维度是数据仓库的灵魂,是将冰冷的事实数据转化为有温度、有语境、可理解的业务洞察的桥梁。理解不同类型的维度(SCD、退化、杂项、角色扮演、多值桥接、层次、雪花、一致性、行为)及其设计模式(代理键、扁平化、处理缓慢变化、一致性),是构建一个高性能、易使用、可持续演进的数据仓库的关键。优秀的维度设计能显著提升数据分析的效率、深度和价值,赋能企业基于数据做出更明智的决策。
-----------------
为什么选择涤生大数据?
- 1.跟随行业专家学习:我们的导师不是传统的讲师,而是实际的行业专家。他们都是来自国内一线大厂的资深开发,大数据技术专家等。
- 2.跟企业在职开发一起学习:涤生的社招学员目前60%+是企业在职进阶学员,基本各大厂的进阶学员都有,他们的薪资从10k,15k,20k,25k,30k,35k,40k。所以你会跟很多企业在职人员一起交流学习
- 3.定制化课程设计:结合每位学员的进行定制化教学,学习规划,让你的学习更有重点;结合每个学员的时间规划学习进度,督促考核,让学习变得更加灵活。
- 4.专业教学和平台:术业有专攻,企业怎么用,面试怎么面,我们就怎么学,涤生让大数据学习不迷惘。目前涤生采购10台服务器,自研提供一站式大数据平台供学习使用,拒绝虚拟机。
- 5.专业的简历面试辅导:涤生内部所有同学简历面试辅导都包含在内,从学习到入职试用期全流程提供保障服务。2024年截止当前涤生到简历面试7级群的学员就业率98%+,2024年上岸200+同学,60+入职一线中大厂。当然也有不少培训找不到工作的同学,以及裁员的同学,空窗期太久,最终跟着我们搞顺利上岸
- 6.不错的口碑:在涤生这,只要你不摆烂,我们不抛弃不放弃。目前涤生的学员大概有25%是老学员推荐和转化。
- 7.专门的校招大数据:校招跟社招不一样。全网独家的校招大数据课程,专门的校招团队辅导,今年是第五届校招大数据,内部校招面试资料覆盖一线中大厂90%的面试。从校招规划+系统的大数据课程+实习面试辅导+简历面试辅导+实习期辅导+试用期辅导,一次收费一条龙全流程贯穿。2024春招+2025年春招累计50+同学拿到一线中大厂offer