缓慢变化维

更新时间:2023-04-17 06:48:28 阅读: 评论:0


2023年4月17日发(作者:m16螺栓尺寸图)深⼊解析数据仓库的⽀架表
前⾔
⽀架表是维度设计中⾮常有意思的⼀部分,可以说是星型模型和雪花模型的结合;但在⼤部分维度建模书⾥都只是简单的⼀笔带过,实在是过于可
惜。
在本⽂,笔者会对⽀架表进⾏详细的介绍,并就其实际应⽤端午高速免费吗 场景进⾏探讨。
⽀架表的诞⽣
⽀架表的诞⽣离不开经典的数仓模型之争——星型模型与雪花模型
星型模型
简单地说,所有的维度表都连在1个事实表上,就是星型模型
星型模型
星型架构是⼀种⾮规范化的结构,多维数据集的每⼀个维度都直接与事实表直接连接。
所以数据必公务员考试常识 然存在⼀定的冗余。
雪花模型
当有⼀个或多个维表没有直接连接到事实表上,⽽是通过其他维表连接到事实表上时生三胎政策 ,其图解就像多个雪花连接在⼀起,故称雪花模型。
雪花模型是对星型模型的扩展。它对星型模型的维表进⼀步层次化,原有的各维表可能被扩展为⼩的事实表,形成⼀些局部的 " 层次 " 区域,这
些被分解的表都连接到主维度表⽽不是事实表。
对于研发出⾝的⼈来说,雪花模型更符合他们的审美——符合范式且不会存在数据的冗余。

雪花模型.png
雪花模型虽然看起来的确舒服,但在数仓中——尤其是Kimball模型——基本⽆⼈采⽤,其对于开发⼈员的技术要求、ETL的开发、后续的运维都
过⾼;当然主要是没这个必要搞那么复杂。
⽀架表
虽然上⾯也提到了,雪花模型不怎么靠谱。但星型模型的冗余有时候的确会有点太多了。
星型模型的冗余.png
虽然我们不推崇雪花模型,但如果⼀组属性在维度表中出现不⽌⼀次时,我们也可以采⽤受限的雪花模型——也就是⽀架表。

⽀架表的简单应⽤.png
可以看到,冗余被⼤量减少了,结构也看起来舒服多了。
⽀架表的使⽤场景
让我们先回顾⼀下⽀架表的定义
当⼀个属性集合(例如⽇期、地点)在某个维度或多个维度表中反复出现时,就可以考虑使⽤⽀架表。
正如 Kimball ⾃⾝给出的定义,⽀架表不能乱⽤——⽤多了不就是另⼀个雪花模型吗?只有在以下条件的时候再考虑:
在单个维度表中反复出现该⽀架属性时
例如雇员维度表中,同时调⽤了 出⽣⽇期属性 和 ⼊职⽇期属性 两个⽇期131工程 属性值。
被调⽤的属性值较多时
即使被反复调⽤,如果每次都只有1、2个属性值。那笔者还是推荐保留星型模型;不过⽇期、地点这种太多的就算了。
被多个维度、事实表调⽤,且被调⽤时的属性值定义完全相同
例如⽇期、地点
基本不需要修改或修改频次极⼩
正如雪花模型的ETL令⼈头痛⼀样,⽀架表的ETL也极为复杂(下⾯详细说)。
解决⼀个东西变化修改复杂的最好办法就是避免它变化。
⽀架表的注意要点
例如时间表——稳定在 24 * 60 * 60 ⾏(粒度在秒时)

更多的表关联
显⽽易见,⽀架表的使⽤会增加查询时的关联数量。⼀⽅⾯会造成查询复杂性的增加。另⼀⽅⾯存在降低性能的风险。
如果数情况的近义词 据量不⼤,可以考虑写个视图来完成维度表和⽀架表的关联。
缓慢变化维的处理
使⽤⽀架表时,⼀定要特别注意缓慢变化维的相关规则。
例如类型2,有时即使维度⾏并未发⽣变化,但也可能需要其对应⽤类型2变化——因为⽀架表的类型2变化。
我们举⼀个简单的例⼦。
假定location⽀架表有⼀个业务地点名称叫 “XR门诊中⼼”,突然有⼀天这个地点名称更改为“XR专科门诊”。业务规则规定以前的业绩还是
计⼊之前的名称,但改名后的业绩需要⽤新的名称来统计。
那我们就需要使⽤类型2变化来响应,在Location表⾥添加新⾏——包含代理键和新的地点名称。同时在ur表⾥添加新⾏,其中location的代
理键⾃然使⽤新值。
也可以考虑使⽤类型1处理——如果业务接受的话。
字段命名的问题
当⼀个维度对相同的⽀架表有多个关联关系时(⼤概率存在),再仔细的开发⼈员也会犯错。
数仓要求 字段定义——字段名称 最好保证完整的⼀致(也就是总线矩阵中的⼀致性维度)。但在维度表和⽀架表中显然不可能实现——就是会反
复调相同属性才会使⽤⽀架表。因此这⾥的字段命名设计、ETL设计、元数据维护、⽂档管理都尤为的重要。
常见的⽀架表
⽇期-date
⽇期⽀架表应该是最常⽤的⽀架表了——尽管很多时候使⽤者并不知道这叫⽀架表
字段名字段类型注释example
day_keyint代理⾃增ID,⽤于对外关联1
full_date完整⽇期date2020-8-21
day_of_week_number该周第⼏⽇int1
day_of_week_en_name该周第⼏⽇英⽂charmonday
day_of_week_ch_name该周第⼏⽇中⽂char周⼀
day_of_month该⽉第⼏⽇int12
holiday_flag是否节假⽇char
weekday_flag是否周内char

weekend_flagchar是否周末
字段名字段类型注释example
char所属⽉香蕉的谜语 魅态人像摆姿技巧 英⽂名Maymonth_en_name
char所属⽉中⽂名五⽉month_ch_name
int所属⽉5month_number
int所属年year2020
int所属季度quarter3
⽇期⽀架表是最常⽤的⽀架表,字段I⾃然不⽌这⼗⼏个。限于篇幅展⽰这些,具体内容建议结合业务之余百度。
时间-time
时间⽀架表经常被⼈忽略,但却是笔者⼼中最完美的⽀架表——永不变化,永远稳定
字段名字段类型注释example
time_keyint代理⾃增ID1
condint59
minuteint59
hourint23
time_rangechar时间段下午
am_flagchar是否中午12点前
pm_flagchar是否中午12点后
时间⽀架表被忽视的最主要原因就是不常⽤......
地点-location
location表的风险点,在于它的更新频率并不低,例如国家 撤县划区 。这种情况下就需要考虑缓慢变化维的处理了。
字段名字段类型注释example
location_keyint代理⾃增ID1
location_idint1TP系统的⾃然键
gov_codecha公司年会主持 r610502官⽅的地址编码
districtchar临渭区所在区
citychar渭南市所在地级市
provincechar陕西省所在省
countrychar所在国中华⼈民共和国
post_codechar邮政编码714000
location表深究起来字段亦是⾮常多的,这⾥只列烫头发的药水 部分。
其他杂谈
业务驱动

⽀架表乃⾄整个数仓的搭建时,都要从业务⾓度来思考。甚⾄可以在最后⼀步再调研已有系统——如果定义的指标、维度合理⽽⽬前研发不能满
⾜,那我们需要的是研发补充⽽⾮修改指标定义甚⾄放弃这个指标。数据是产⽣于各个系统,但产⽣作⽤永远是在业务⽅⾯。
不要节省资源
很多建模师推荐使⽤范式建模⽽⾮维度建模,这种模型师⽆疑是优秀的技术架构师——毕竟这年头还有很多系统连范式都没有——但毫⽆疑问不是
优秀的数据架构师。从数据的⾓度,数据库容量永远是最后考虑的东西。
或者换个⾓度,告诉⽼板你可以提升BI展⽰5倍的速度、⽇常写SQL效率10倍,但需要⽬前4倍的硬盘容量。对⽼板来说这连选择题都不是。
星型模型与雪花模型
或者更准确的说,是维度建模与范式建模。纯粹的范式建模不适⽤与OLAP系统,纯粹的星型模型也会遇到⽆数的苦难。根据实际业务情况(未来工作 ⽽⾮
底层系统)进⾏适当的妥协——例如微型维度和⽀架表——才能使你的模型真正靠谱。


本文发布于:2023-04-17 06:48:28,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/833816.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:聚乙烯pe
标签:缓慢变化维
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图