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

相关文章:

  • 10M25DCF484C8G Altera FPGA MAX10
  • 华为云服务器(ECS)新手入门:注册、购买与使用实操教程
  • 算法提升树形数据结构-(线段树)
  • 有关SWD 仿真和PA.15, PB3, PB4的冲突问题
  • Mac 上安装并使用 frpc(FRP 内网穿透客户端)指南
  • AI + 金融领域 + 落地典型案例
  • UTF-8 编解码可视化分析
  • IDM 下载失败排查全攻略
  • 移动端网页调试实战 Cookie 丢失问题的排查与优化
  • 前置端子铅酸蓄电池:结构革新驱动下的全球市场格局与产业机遇
  • 沪深股指期货指数「IF000」期货行情怎么看?
  • JS对象与JSON转换全解析
  • 第12课_Rust项目实战
  • 版本软件下载电脑适配说明
  • STL模板库——string容器
  • Mac编译Android AOSP
  • Spring Boot 3.4.x 性能优化实战:用 Undertow 替换 Tomcat 全指南​
  • 23种设计模式——适配器模式(Adapter)​详解
  • 力扣 hot100 Day79
  • 【ansible】1.介绍ansible
  • 小波变换(详细解释和代码示例)
  • 车载软件架构 --- 赢得汽车软件开发竞赛
  • 【数据集】Argoverse 数据集:自动驾驶研究的强大基石
  • electron进程间通信-从主进程到渲染器进程
  • 芯科科技即将重磅亮相IOTE 2025深圳物联网展,以全面的无线技术及生态覆盖赋能万物智联
  • HTML5 视频与音频完全指南:从基础的 <video> / <audio> 标签到现代 Web 媒体应用
  • 软考网工选择题节选-2
  • 为了更强大的空间智能,如何将2D图像转换成完整、具有真实尺度和外观的3D场景?
  • 案例分享:BRAV-7123助力家用型人形机器人,智能生活未来已来
  • Java并发容器详解