最具影响力的数字化技术在线社区

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
打印 上一主题 下一主题
开启左侧

漫谈“缓慢维度变化”

[复制链接]
跳转到指定楼层
楼主
发表于 2019-6-25 20:13:59 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
一个困扰已久的问题
缓慢维度变化(Slowly Changing Dimension),是指维度建模得到的数据模型,因维度变化导致的数据分析异常。穆晨以为这是数仓理论最为重要的概念,故写下此文深入剖析之。

问题描述
—— 从数据库vs数据仓库开始

在前文中,穆晨提出了个有趣的观点:数据库是对客观世界的模拟,而数据仓库则是对人脑思考的模拟。客观世界时刻在变,数据库有范式建模足以应对,那数据仓库呢?
数据库是面向应用的,因此它的数据不会存太久,同时它基于范式建模,因此可直接修改数据不用顾虑更新异常;数据仓库则是面向分析的,如果要修改维度,即使可通过重写避免更新异常,但也避免不了历史信息的丢失。
现在问题来了:如果维度信息不能更改,那还能被称为“人类思考的模拟”吗?这样的数据仓库岂不是成了“老顽固”?


问题溯源
—— 五岳归来不看山?

讨论这类问题的过程的确挺枯燥的,所以穆晨引入古人徐霞客的例子,来类比研究数据分析异常出现的原因吧。
徐霞客曾言“五岳归来不看山,黄山归来不看岳”。显然他感受了五岳和黄山后,对“好山”的标准定义极为严格。但我们更关心的是他曾发现的所有“好山”,而不仅仅是他晚年认可的好山——那就只有一座黄山了。
另一方面,基于数据仓库的分析,也经常是要使用历史维度信息的。比如统计某国商圈的既往人流量,如果该商圈是动态生成的,那计算商圈既往人流时,就必须用既往的商圈维度。
所以,当“评价维度”发生变化后,我们不能直接修改维度,这样历史维度信息就丢失了。如何保留维度信息,从而灵活进行历史数据分析,正是“缓慢维度变化”需要考虑和解决的问题(不缓慢的情况也应考虑到)。


理论分析
—— 知其然,知其所以然?

在数据仓库理论中,解决缓慢维度变化的关键在于“三件套”:唯一性Key、有效时间戳、有效性标签。那为什么要设置这三项,在数据分析中又如何用它们进行历史数据分析呢?
显然当维度变化后,为了不丢失维度信息,只能往维度表里新增维度记录。但维度记录新增后,为了分析历史数据,自然要说明“旧维度”生效的时间段;同时为了方便查询当前业务,应当增加一个标签字段,表示该维度记录是否最新。
那为什么还要有唯一性Key?这其实是个有趣的问题。网上不少文章认为这是出于“主键”机制的考虑,因为新增维度信息后,原来的维度记录id就不唯一了。这里穆晨反驳一句,以维度记录id+时间戳为联合主键就可以了么?
结果是这会导致事实表也不得不冗余时间戳数据,是个很“恶心”的设计。最好还是新增维度的唯一性Key,同时将之设为交易表与维度表的关联键。

方案实践
—— just do it

实践得分两大部分说。一Part是数据仓库开发;另一Part是数据分析实现。这两部分都会产生一定开发与维护上的工作量,所以请事先确认好业务上是否需要考虑维度变化问题。
A
数据仓库开发
维度表开发:由于业务系统不会存放太多历史数据,更不会有专人维护维表。因此就需要DW人员定时更新历史维表,刷新其中的时间戳与有效性标签字段。
事实表开发:相对维表来说,事实表的开发简单很多,只需将维表的唯一性Key融合进来即可。
B
数据分析实现
构建好新的数据模型后,就能用它做历史数据分析了。由于维度表中包含了历史维度信息,因此分析逻辑会比不考虑维度变化的复杂一些。
在分析当前维度时,可用标志id去关联事实并加上可用性标签过滤;而分析历史维度时则可用唯一Key关联事实表并用时间戳字段截取统计值。

结 语
对于业务稳定的国有企业,维度变化问题其实并不严重;但在互联网公司中,由于业务变更迅速,产品迭代快,需要重点关注这个问题。
穆晨身边有些同事不甚了解维度变化,写了大量复杂的SQL,亦或折中各类业务方案。窃以为不论从数据资产积累还是个人技术沉淀角度来看,这都是不可取的。

作者:穆晨  来源:拾光斋
楼主热帖
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 赞 踩

168大数据 - 论坛版权1.本主题所有言论和图片纯属网友个人见解,与本站立场无关
2.本站所有主题由网友自行投稿发布。若为首发或独家,该帖子作者与168大数据享有帖子相关版权。
3.其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和168大数据的同意,并添加本文出处。
4.本站所收集的部分公开资料来源于网络,转载目的在于传递价值及用于交流学习,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
5.任何通过此网页连接而得到的资讯、产品及服务,本站概不负责,亦不负任何法律责任。
6.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源,若标注有误或遗漏而侵犯到任何版权问题,请尽快告知,本站将及时删除。
7.168大数据管理员和版主有权不事先通知发贴者而删除本文。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-4-25 07:22

Powered by BI168大数据社区

© 2012-2014 168大数据

快速回复 返回顶部 返回列表