当前位置: 首页 > news >正文

细说数仓中不同类型的维度

本周给一位同学复盘,被问到了有哪些核心的维度,贷款的五级分类是哪些?结结巴巴犹犹豫豫,说出来及格比较普遍的维度,贷款得五级分类直接不知道,这个就是平时不关注业务得问题,所以大家在平时复习时,一定要多关注业务上得核心点。当然,这些问题不仅考察了对于业务的理解,还考察了维度在实际工作中的应用。在数据仓库的宏伟建筑中,维度建模如同支撑其稳固性的钢筋骨架。而维度表正是这座大厦中定义业务过程语境、提供灵活分析视角的关键构件。理解维度的不同类型及其设计精髓,是构建高效、易用、面向分析数仓的核心能力。今天就来详解一下各种类型的维度。

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

http://www.dtcms.com/a/341251.html

相关文章:

  • 实时交互世界模型新标杆! Skywork AI 发布 Matrix-Game 2.0: 攻克实时交互难题,在实时性与视频生成质量上实现跨越式突破!
  • synchronized锁,ReentrantLock 锁
  • 基于隐函数定理的偏导数计算及其C++实现
  • 批处理指令常见问题
  • 基于langchain重现agent调用llm和tools的过程
  • Angular入门教程
  • VG技术下,美术在资源制作时的规范
  • 前端 下载后端返回的二进制excel数据
  • Java集合框架:Set、List、Map及HashMap底层实现详解
  • 在Excel和WPS表格中制作可打印的九九乘法表
  • Flask高效数据库操作指南
  • Qt音乐播放器项目实践:本地持久化与边角问题处理
  • 对象存储 COS 端到端质量系列——终端 COS SDK 网络优化
  • 开发中使用——鸿蒙特有的图片保存到相册的方式
  • 气泡水位计在水库大坝安全监测中的应用
  • 大语言模型研究进展
  • 【MAR】OSCNet+学习笔记
  • 机器学习总复习
  • Redis知识总结
  • IDEA:控制台中文乱码
  • 【JavaEE】多线程 -- 定时器
  • 无人机感知系统详解
  • Excel表格复制到word中格式错乱
  • 【Java】深入浅出Spring中的@Autowired:自动注入的奥秘
  • 机器翻译 (Machine Translation) 经典面试笔试50题(包括详细答案)
  • imx6ull-驱动开发篇29——Linux阻塞IO 实验
  • Java并发容器详解
  • 【LLIE专题】BEM:一对多映射,贝叶斯增强模型
  • Deepseek+python自动生成禅道测试用例
  • 将集合拆分成若干个batch,并将batch存于新的集合