被数仓圈用了30年的维度表:从来不是技术配角,是业务混乱的解药

上周帮一个做生鲜电商的客户数仓排障,翻了三页SQL就笑了。所有的join逻辑全堆在事实表上,用户表、商品表、门店表全是硬编码关联,跑一次全量报表要47分钟。问他们为啥不用维度表,技术负责人挠头——”知道有这东西,但是没人说清到底该怎么用,不就是张存属性的表吗?”

别把维度表当”附属表”:它的核心是把混乱的业务拆成可复用的零件

很多人对维度表的认知还停留在”数仓里存描述信息的辅助表”,这个误解从根上就错了。维度表的本质,是把散落在各个业务系统里的、用来描述实体属性的信息,抽离成统一的、可复用的公共零件。事实表记录的是”发生了什么”——比如用户花32块买了2斤山东红富士,交易发生在南京建邺区的社区门店,下单时间是2024年6月1日晚8点17分。那维度表记录的就是”这些交易相关的实体到底是什么”:这个下单的用户是连续3年的钻石会员,住在门店周边1.2公里的小区;这箱苹果是当季新果,供货价11块/斤,属于平台重点推广的有机品类;这个门店是去年刚开的社区店,月均营收在同区域排前10%。

星型模型维度表与事实表关联示意图
星型模型维度表与事实表关联示意图

说真的,我见过太多团队把维度表用成了无底线的垃圾场。什么杂七杂八的字段都往用户维度表里塞,今天加个”是否参与过618大促”,明天加个”用户最近一次点击优惠券的时间”,后天再塞个”用户客服咨询的次数”。跑出来的报表口径飘得能上天。上个月有个客户找我,说他们算出来的平台整体复购率比运营实际感知的高了18%,查了半天才发现,维度表里把已经注销半年的用户标签没做软删除,所有的统计口径都把僵尸用户算成了活跃群体。

维度表的技术边界其实很清晰。它解决的是”静态、相对稳定的描述类属性的统一”,不是用来解决所有数据冗余问题的万能药。那种每笔交易都会变动的实时金额、逐秒更新的用户行为流,就老老实实地待在事实表里,别硬塞进维度表。我见过最离谱的一个项目,把用户每次浏览商品的历史记录全存在用户维度表的字段里,导致每次更新维度都要刷全量,本来10分钟能跑完的批处理任务,硬生生拖到了6个小时。

现在的维度表,早就不是数仓专属的老古董了

最早的维度表,就是数仓体系里按月、按天批量更新的静态表,主要服务于离线报表查询。但现在这几年技术栈迭代快,维度表的形态早就变了。实时数仓普及之后,毫秒级更新的实时维度表,已经成了实时计算链路里最核心的依赖组件。比如做直播间的实时商品推荐,用户刚刷到一条火锅食材的短视频,你不能等晚上数仓批处理完才把”对川味火锅感兴趣”这个标签刷进用户维度表——那时候用户早就退出APP了,推荐的菜都凉透了。

实时数仓维度表毫秒级更新架构图
实时数仓维度表毫秒级更新架构图

之前跟一个做实时数仓的厂商聊,他们说现在客户找过来,一半的需求不是要更快的计算引擎,不是要更高的QPS,是要更靠谱的维度表管理能力。为啥?因为引擎的性能再强,维度表的口径错了,算出来的所有结果全是废的。就像你给跑车装了12缸的发动机,但是方向盘是歪的,开得越快,撞得越狠。

更有意思的是,这两年大模型应用起来之后,维度表还找到了新的生存空间。很多团队做RAG系统,一开始直接把全量文档丢进向量库,查询的时候全库扫描,不仅慢,还经常把不相关的文档捞出来。现在的标准做法,是先通过维度表把符合条件的实体ID筛出来——比如要找”2024年华东区域所有有机蔬菜供应商的资质文档”,先从供应商维度表里把华东区、有机资质的供应商ID全部捞出来,再去向量库匹配这些ID对应的文档,检索效率能提几十倍,准确率也能上去。

维度表的坑,从来不是技术问题,是组织问题

很多公司推维度表治理推不下去,根本不是技术实现不了,是跨部门的口径统一根本推不动。市场部说”用户活跃是打开APP就算”,运营部说”用户活跃是要完成一笔下单才算”,客服部说”用户活跃是找过客服咨询就算”,三个部门对着同一个用户维度表吵了三个月,最后谁也说服不了谁,做出来的维度表成了四不像,每个字段都标了好几个不同的定义,没人敢用。

之前接触的一个连锁咖啡品牌,光”门店”这个最基础的维度,就有三个完全不同的版本:财务系统里的门店是算房租和人力成本的,只要完成工商注册就算,哪怕还在装修没开业;运营系统里的门店是要能正常出餐的,试营业满7天就算;市场系统里的门店是要能对外投放广告的,在大众点评上有公开页面就算。三个系统算出来的门店总数,差了快20%。之前老板开周会,听三个部门报的单店营收数据都不一样,拍桌子说你们是不是合起伙来骗我。后来花了半年时间,把三个系统的门店维度统一成了一张公共表,每个字段的定义写得明明白白,谁要加新字段必须走跨部门评审流程,这才把各个部门的报表口径对齐。

这里面的风险其实一点都不少。我见过太多公司的维度表,权限管理是完全失控的。之前有个本地零售的公司,员工把用户维度表里的手机号字段导出去卖给了第三方营销公司,查了半天才发现,这张核心维度表居然对所有技术人员开放了无限制的查询权限,连最基础的手机号脱敏都没做。还有的团队做维度表更新,完全没有溯源记录,谁改了哪个字段、改之前的值是什么,根本查不到,出了问题连责任人都找不到。

站在现在看未来3到5年,维度表的进化路径其实挺清晰的。

首先,维度表会从数仓的专属组件,变成整个企业数据系统的主数据底座。不管是离线数仓、实时计算、业务系统,甚至是大模型应用,都会直接对接统一的维度表,不会再各个系统自己存自己的实体属性,避免重复建设。其次,维度表的管理会从纯技术团队的内部工作,变成面向业务人员的可视化平台——业务人员不用写SQL,就能在界面上看到每个维度的字段定义,申请新增字段,不用每次提需求都要排一两周的队找数据部门。最后,会出现专门的”维度表治理”岗位,不是那种打杂的数据治理专员,是专门负责协调跨部门口径、解决扯皮问题的角色。别小看这个岗位的价值,好的维度表治理,能帮公司省下来至少30%的数仓开发成本,能把报表的可信度提好几个档次。

上周那个生鲜电商的客户,按照我们梳理的方案,把用户、商品、门店三张核心维度表重新做了统一,把所有硬编码的join逻辑全部抽离,跑全量经营报表的时间从47分钟降到了6分钟。技术负责人给我发消息说,原来之前花了几百万上的高端数仓系统,一半的性能浪费都是因为维度表从一开始就用错了。

哪有什么复杂的技术魔法。

把最基础的东西做扎实,比追多少热点技术都有用。

作者|大讲堂

排版|大讲堂

审核|安然

免责声明:市场有风险,选择需谨慎!此文仅供参考,不作买卖依据。如有侵权请联系删除。
文章名称:被数仓圈用了30年的维度表:从来不是技术配角,是业务混乱的解药
文章链接:https://m.lfdjt.com/info_23_28566.html