当前位置: 首页 > 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.lryc.cn/news/626717.html

相关文章:

  • 哈希:字母异位词分组
  • Linux系统:C语言进程间通信信号(Signal)
  • 动态规划----6.单词拆分
  • Java 大视界 -- Java 大数据在智能医疗远程会诊数据管理与协同诊断优化中的应用(402)
  • C++---向下取整(>>)与向零取整(/)
  • WPF Alert弹框控件 - 完全使用指南
  • 【力扣 买卖股票的最佳时机 Java/Python】
  • 【Unity3D优化】平衡 Hide 与 Destroy:基于性能等级与 LRU 的 UI 管理策略与实践思考
  • 大数据毕业设计选题推荐-基于Hadoop的电信客服数据处理与分析系统-Spark-HDFS-Pandas
  • 计算机网络模型
  • 华为数通认证学习
  • CSS 定位的核心属性:position
  • SPSS数据文件的建立与管理
  • JAVA中向量数据库(Milvus)怎么配合大模型使用
  • 案例分享:BRAV-7123助力家用型人形机器人,智能生活未来已来
  • vscode连接docker
  • Linux 文本处理与 Shell 编程笔记:正则表达式、sed、awk 与变量脚本
  • React-native之组件
  • 51单片机-驱动LED点阵模块教程
  • Gitee仓库 日常操作详细步骤
  • 【笔记】动手学Ollama 第五章 Ollama 在 LangChain 中的使用 - Python 集成
  • 康师傅2025上半年销售收入减少超11亿元,但净利润增长20.5%
  • Linux《进程间通信(下)》
  • LidaReferv1论文细节解读
  • Linux面试经典题目(七)
  • 在SQL中使用大模型时间预测模型TimesFM
  • 不会写 SQL 也能出报表?积木报表 + AI 30 秒自动生成报表和图表
  • sqlalchemy 是怎么进行sql表结构管理的,怎么进行数据处理的
  • 深度学习核心技巧
  • SQL-leetcode— 2356. 每位教师所教授的科目种类的数量