不同数据仓库模型有什么不同?企业如何选择适合的数据仓库模型?
目录
一、数据仓库概述
1.数据仓库的定义
2.数据仓库的作用
3.数据仓库的发展历程
二、常见的数据仓库模型
1.范式模型
2.维度模型
3.星座模型
4.雪花模型
三、不同数据仓库模型的差异
1.数据结构差异
2.查询性能差异
3.数据冗余度差异
4.适用场景差异
四、企业如何选择适合的数据仓库模型
1.考虑企业的业务需求
2.考虑数据的特点
3.考虑企业的技术能力
4.考虑企业的发展战略
总结
Q&A 常见问答
现在做企业的,谁没听过“数据驱动决策”?但真要落地的时候,很多人都会卡在“数据怎么管”这一步——销售数据在POS系统里,库存数据在ERP里,客户数据在CRM里,想凑齐数据做个分析,要么格式对不上,要么重复数据一堆,光整理就花大半天。
数据仓库就是帮企业把这些散数据“拢到一块儿、理清楚”的工具,而数据仓库模型,就是给这些数据“搭架子”——怎么放才规整、怎么查才快、怎么用才方便。像FineDataLink,帮企业把数据往数据仓库里导的时候,就得照着模型的架子来,不然数据堆进去就是一团乱麻,根本没法用。今天咱们就把不同数据仓库模型的差异说透,再教你怎么选适合自己的,全是能落地的干货,保证你听完就有方向。
在文章正式开始之前,先分享一份《数据仓库建设方案》,里面包括调研、需求梳理、建设规范、建模全流程,从数据标准的规范到报表体系的建设都提供明确的建设思路,高效解决常见的口径不一致、报表查询慢等问题。需要自取:免费体验——数据仓库建设方案
一、数据仓库概述
1.数据仓库的定义
简单来说,数据仓库就是个“专门存企业分析用数据的地方”。不是说把业务系统里的数据直接搬过来就行,得先处理——比如把ERP里的“客户编号”和CRM里的“客户ID”统一格式,把重复的订单数据删掉,把缺失的库存数量补全,然后再存到一起。
说白了,它跟业务系统的数据库不一样。业务数据库是“实时干活用的”,比如你在电商下单,数据马上存到业务库;但数据仓库是“事后分析用的”,比如月底分析“这个月哪个地区下单多”,就从数据仓库里调数据。我一直强调,数据仓库的核心是“支持决策”,不是“支持实时交易”,你懂我意思吗?
2.数据仓库的作用
数据仓库对企业的价值,远不止“存数据”这么简单。
- 首先是“不用再凑数据”——之前要分析一个问题,得从四五个系统里导数据,现在从数据仓库里调就行,格式是统一的,数据是干净的,省了大把时间。我之前有个客户,没数据仓库的时候,出一份月度销售报表要一天,有了之后半小时就搞定,分析师终于不用天天加班凑数据了。
- 其次是“能做深度分析”——数据仓库里存了历史数据,比如存了三年的销售数据,就能分析“每年Q3的销售趋势”“哪些产品每年都卖得好”,这些靠业务系统的实时数据是做不到的。
- 此外,它还能“打破数据壁垒”——销售部的客户数据、财务部的利润数据、运营部的活动数据,之前各管各的,现在都存在数据仓库里,哪个部门要分析,都能调出来用。比如销售部想知道“哪个客户带来的利润最高”,直接关联客户数据和利润数据就行,不用再去问财务部要报表。
FineDataLink作为一款专业的企业级数据集成平台,在这儿扮演的角色,就是“帮数据顺利进仓库”——把各个系统的数据抽出来,处理好格式,再加载进去,整个过程不用人工干预,省了不少事>>>免费激活FDL
3.数据仓库的发展历程
数据仓库不是一开始就这么完善的,它走了几十年才到现在的样子。
- 早期的时候,大概是上世纪80年代,企业数据量小,数据仓库就是个“简单的数据库”,存点销售、财务数据,只能做简单的统计,比如“这个月卖了多少钱”。
- 后来到了90年代,企业数据量变大了,开始分“主题”存数据,比如专门建个“销售主题库”“库存主题库”,这就是“数据集市”的雏形。那时候的问题是,各个主题库之间没关联,想分析“销售和库存的关系”,还是得凑数据。
- 再到2010年之后,大数据技术起来了,数据仓库能存非结构化数据了(比如客户的评论、产品的图片),还能跟Hadoop、Spark这些工具结合,处理海量数据。
- 现在的数据仓库,不光能存结构化数据,还能存文本、日志,分析能力也强了——比如能实时分析“直播带货的实时销量”,随时调整营销策略。
说这些不是让你记历史,是想告诉你:数据仓库一直在跟着业务需求变,你选模型的时候,也得跟着自己的业务走,别选个“过时的模型”,不然用着用着就跟不上了。
二、常见的数据仓库模型
1.范式模型
范式模型是最“规矩”的模型,严格按照数据库的范式来设计,核心是“减少数据冗余”。比如一个订单,包含订单信息、客户信息、产品信息,范式模型不会把这些信息都存在一张表里,而是分成“订单表”“客户表”“产品表”,通过ID关联——订单表存“订单ID、客户ID、产品ID、下单时间”,客户表存“客户ID、客户姓名、电话”,产品表存“产品ID、产品名称、价格”。
它的优点很明显:
- 数据没重复,比如客户的姓名、电话只存在“客户表”里,改的时候只改一处,不会出现“一处改了,另一处没改”的情况
- 数据一致性特别好。
- 数据量小,因为没重复,存起来省空间。
但缺点也很突出:
- 查询效率低
- 查询速度会很慢
FineDataLink处理范式模型的时候,会优化表连接的顺序,尽量减少查询时间,但即便如此,也比不上其他模型快。所以范式模型一般用在“数据更新频繁、对一致性要求高”的场景,比如银行的交易系统、企业的财务系统,这些场景更在意数据准不准,而不是查得快不快。
2.维度模型
维度模型是数据仓库里最常用的模型,核心是“方便查询、适合分析”,主要由“事实表”和“维度表”组成。
事实表存的是“业务事实”,比如销售金额、销售数量、订单数,都是能算的数字;维度表存的是“分析的角度”,比如时间、客户、产品、地区,都是用来“切数据”的维度。比如“2024年5月北京地区A产品的销售额”,“销售额”是事实表的字段,“2024年5月”是时间维度,“北京”是地区维度,“A产品”是产品维度。
它的优点很直接:
- 查询快
- 容易理解
缺点:数据有冗余。但现在存储成本很低,这点冗余根本不算事,所以大部分企业做分析,都选维度模型。
FineDataLink特别适配维度模型,加载数据的时候,能自动区分事实表和维度表,事实表按时间分区,维度表建索引,加载完之后查询更快。
3.星座模型
星座模型是维度模型的“升级版”,核心是“多个事实表共享维度表”。比如企业有“销售事实表”和“库存事实表”,这两个事实表都需要“时间维度表”“产品维度表”“地区维度表”,就不用各建一套维度表,共享一套就行。
它的优点是:
- 减少维度表冗余
- 数据一致性更好
- 适合“多业务主题分析”
这里要注意,星座模型不是“越多事实表越好”——如果事实表之间没共享的维度,比如“销售事实表”和“员工考勤事实表”,共享的维度只有“时间”,其他维度都不一样,那建星座模型意义不大,还不如分开建维度模型。所以得看业务主题之间的关联度,关联高才适合。
4.雪花模型
雪花模型是维度模型的“另一种变形”,核心是“维度表再拆分”,把维度表按范式规则拆成更细的子表。比如“客户维度表”里有“客户所在地区”,雪花模型会把“地区”拆成“地区表”,包含“地区ID”“省份”“城市”“区县”,然后“客户维度表”通过“地区ID”关联“地区表”;再比如“产品维度表”里有“产品分类”,会拆成“产品分类表”,包含“分类ID”“大类”“小类”,产品维度表关联分类表。
它的优点是:
- 维度表冗余更少
- 节省存储成本
但缺点也很明显:
- 查询更复杂
- 查询速度较慢
- 理解难度大
我之前有个客户,一开始觉得雪花模型“冗余少、规范”,就选了这个模型,结果业务人员每次查数据都要问IT,IT天天被催着写SQL,最后没办法,又改成了维度模型。所以雪花模型一般用在“维度层级多、对冗余特别敏感”的场景,比如做全国性业务的企业,地区维度分“国家-省份-城市-区县-街道”,拆成子表更规整,也能减少冗余,其他场景真不建议选。
三、不同数据仓库模型的差异
1.数据结构差异
- 范式模型的数据结构最“散”——数据按实体拆成多个表,表和表之间靠主键外键关联,比如“订单表”关联“客户表”“产品表”,“产品表”又关联“供应商表”,像一张大网。这种结构的好处是没冗余,但查的时候得把网“撑开”,连很多表。
- 维度模型的数据结构最“集中”——以事实表为中心,周围绕着维度表,比如“销售事实表”周围是“时间、客户、产品、地区”维度表,表之间的关联很直接,查的时候连两三张表就行。
- 星座模型是“多中心+共享维度”——比如“销售事实表”和“库存事实表”两个中心,共享“时间、产品、地区”维度表,结构像多个星星围着共同的行星,关联度高的事实表能共用维度。
- 雪花模型是“维度表再分叉”——比如“客户维度表”分叉出“地区表”,“产品维度表”分叉出“分类表”,结构像雪花的枝丫,维度表越拆越多,关联链条也越长。
2.查询性能差异
从快到慢排,基本是:维度模型≈星座模型>雪花模型>范式模型。
- 维度模型和星座模型查询快,是因为关联的表少。比如查“2024年5月北京地区A产品销量”,维度模型连“销售事实表+时间维度表+地区维度表+产品维度表”四张表,星座模型如果加了库存事实表,也只是多连一张,不会慢太多。
- 雪花模型慢,是因为维度表拆了之后,要多连表。比如同样查上面那个问题,雪花模型得连“销售事实表+客户维度表+地区表+产品维度表+分类表”五张表,比维度模型多一张,查询时间就会增加。
- 范式模型最慢,是因为要连的表太多。比如查同样的问题,可能要连“订单表+客户表+地区表+产品表+分类表+供应商表”六张以上的表,表越多,查询时的计算量越大,速度就越慢。
之前做过一个测试,查“2024年Q1各省份各产品的销量”,维度模型用了3秒,雪花模型用了8秒,范式模型用了25秒。对于需要频繁出报表、做实时分析的企业,维度模型和星座模型肯定是首选。
3.数据冗余度差异
从低到高排,是:范式模型<雪花模型<星座模型<维度模型。
- 范式模型严格按范式来,没任何冗余——客户信息只存一次,产品信息只存一次,改的时候只改一处,绝不会出现“一处改了另一处没改”的情况。
- 雪花模型比范式模型冗余稍高一点,但比维度模型低——维度表拆成子表后,子表的信息是共享的,比如“地区表”的“北京”只存一次,所有客户共享,但事实表还是会存“客户ID”“产品ID”这些,有少量冗余。
- 星座模型的冗余主要在事实表——维度表是共享的,没冗余,但事实表会存各自的业务数据,比如“销售事实表”存“销量”,“库存事实表”存“库存量”,事实表之间没冗余,整体冗余比维度模型低。
- 维度模型的冗余最高——维度表的信息会重复存,比如“时间维度表”的“2024年5月”,会跟所有5月的订单关联,相当于存了很多次。但现在存储成本很低,这点冗余根本不算事,大部分企业宁愿多存点,也要换查询速度。
4.适用场景差异
- 范式模型:适合“数据更新频繁、对一致性要求高、查询少”的场景,比如银行的核心交易系统、企业的财务总账系统。这些场景主要是记录数据,不是分析数据,慢一点也没关系,但数据必须准,不能有不一致。
- 维度模型:适合“查询频繁、需要做简单多维分析”的场景,比如中小企业的销售分析、门店业绩分析。大部分企业用这个模型就够了,性价比最高,业务人员自己就能用。
- 星座模型:适合“多业务主题、维度重复多”的场景,比如大型商超、综合电商,既有销售数据,又有库存数据,还有会员消费数据,共享维度表能省不少事,还能做跨主题分析。
- 雪花模型:适合“维度层级多、对冗余敏感”的场景,比如全国性企业的地区维度分析、跨国公司的多语言维度分析。除了这些场景,真不建议选,免得把简单的事搞复杂。
四、企业如何选择适合的数据仓库模型
1.考虑企业的业务需求
选模型先看“你要用来做什么”。
- 如果你的核心需求是“快速出报表、做多维分析”,比如每周要查“各地区各产品销量”,每月要分析“客户复购率”,那维度模型肯定是首选——查询快,业务人员自己就能操作,不用麻烦IT。
- 如果你的需求是“多业务主题联动分析”,比如既要分析销售,又要分析库存,还要分析供应链,而且这些主题都要用到“时间、产品、地区”维度,那星座模型更适合——共享维度表,不用重复建,还能做跨主题分析,比如“销量高但库存低的产品”。
- 如果你的需求是“数据必须绝对一致,更新特别频繁”,比如财务系统要记录每一笔收支,银行要记录每一笔交易,那范式模型才合适——虽然查询慢,但数据准,不会出问题。
换个角度来看,别为了“追求高级”选模型,一定要选最适合的。
2.考虑数据的特点
- 数据量小、结构简单:比如小企业只有几万条订单数据、几千条客户数据,字段也少(就订单号、客户名、金额、时间),选维度模型就行。不用搞复杂的,开源数据库+FineDataLink就能搭起来,成本低还好用。我之前有个做定制T恤的小客户,数据量就几万条,用维度模型之后,查“哪个图案卖得好”几秒钟就出来,比用Excel快多了。
- 数据量大、多业务主题:比如大企业有几百万条销售数据、几十万条库存数据,还有会员消费、售后维修数据,而且这些数据都要用到“产品、时间、地区”维度,选星座模型更划算。共享维度表能省不少存储,比如“产品维度表”只存一次,不用给销售、库存、售后各建一份,加载数据的时候FineDataLink也能一次性处理共享维度,不用重复加载。
- 数据更新频繁、一致性要求高:比如财务数据每天要更新几十次,银行交易数据每秒都有新记录,选范式模型。这类数据不怕查询慢,就怕错——比如银行转账数据要是有冗余,一处改了另一处没改,客户账户余额就会出错,麻烦就大了。范式模型数据只存一次,更新的时候只动一处,能避免这种问题。
- 要是你的数据维度层级多、对冗余特别敏感:比如做全国性业务的企业,地区维度要分到“国家-省-市-区-街道”,产品维度要分到“大类-中类-小类-规格”,而且数据量特别大(上亿条),存储成本高,那雪花模型可以考虑。把维度表拆成子表,“地区子表”存一次省市区信息,所有客户共享,能省不少存储。但一定要想清楚,查询的时候要多连表,速度会慢,业务人员可能还得学怎么关联子表,这些成本能不能接受。
3.考虑企业的技术能力
- 技术团队强、懂数据库设计:比如有专门的数仓工程师,能熟练写SQL、调表连接效率,那选范式模型或雪花模型没问题。这两种模型设计和维护复杂,比如雪花模型要理清维度表和子表的关联,范式模型要处理多表连接的性能问题,没点技术能力还真搞不定。我之前有个做金融的客户,技术团队都是资深工程师,用范式模型搭了财务数仓,虽然查询要连七八张表,但他们能通过索引优化,把查询时间控制在可接受范围。
- 技术团队弱、没专职数仓人员:比如IT团队就两三个人,还得兼做运维、修电脑,那千万别选范式或雪花模型。选维度模型最省心,表结构简单,就事实表+几张维度表,FineDataLink能自动处理数据加载,业务人员自己用前端工具查数据,不用麻烦IT。我之前有个做连锁餐饮的客户,IT就两个人,用维度模型之后,除了初期搭建,平时基本不用维护,省了不少事。
还有一点要注意,要是你选了雪花模型,后续维护成本会很高。所以技术能力不够的企业,优先选维度模型,别给自己找罪受。
4.考虑企业的发展战略
- 要是你计划未来业务会大幅拓展,比如现在做区域业务,以后要做全国业务,还要加会员、供应链新业务,那选星座模型更合适。它扩展性好,以后加新业务主题,只要新主题有共享维度,直接加个新事实表就行,不用重新搭维度表。比如现在有销售事实表,以后加会员事实表,共享产品、时间、地区维度,直接建会员事实表关联共享维度就行,不用再建一套维度表。
- 要是你计划长期存储数据,比如要存10年的销售数据,还要保证数据一直准确,那可以考虑雪花模型或范式模型。这两种模型冗余低,存10年数据也不会占用太多存储,而且数据一致性好,多年后查历史数据也不会出现“同一产品名前后不一致”的情况。
- 但要是你没什么长期规划,先解决“当下查数据难”的问题,那选维度模型最实在。先把眼前的问题解决了,以后业务变了,再用FineDataLink把数据迁移到其他模型也不迟。我一直强调,选模型要着眼未来,但别为了“未来可能用不上的需求”,把当下的事搞复杂——很多企业就是因为想“一步到位”,选了不适合当下的模型,结果数据仓库建完了没人用,白花钱。
总结
不同数据仓库模型没有“绝对的好坏”,只有“适不适合”。
企业选模型,别只看“别人用什么”,核心是要结合自己的业务需求、数据特点、技术能力和发展战略,综合判断。
好了,言归正传。数据仓库的核心是“用好数据”,模型只是工具。别为了追求“技术先进”选不适合的模型,也别觉得“数据量小就不用选模型”——哪怕你只有几万条数据,选对模型能让你查数据快10倍,决策也能更准。所以一定要花时间理清需求,选对模型,让数据真正帮到业务,而不是变成“没人用的僵尸数据”。
Q&A 常见问答
Q1:企业一开始选了维度模型,后来业务扩展了,能改成星座模型吗?
A:能改,但得有方法,不能瞎改。首先要确认“新业务和老业务有没有共享维度”——比如你之前用维度模型做销售分析,现在要加库存分析,要是两者都用“产品、时间、地区”维度,改星座模型才划算;要是新业务是员工考勤,和销售只有“时间”一个共享维度,改星座模型意义不大,不如加个新的维度模型。
改的时候分三步:
- 第一步,先备份老数据,万一改坏了还能恢复,这步千万别省!我之前有个客户没备份,改模型的时候误删了销售数据,最后花了三天才恢复,耽误了出报表。
- 第二步,在测试环境先搭新模型——把原来的销售维度表改成共享维度表,再新建库存事实表关联共享维度,测试能不能查“销售高但库存低的产品”,看看数据对不对、查询快不快。
- 第三步,测试没问题了,再把新模型同步到生产环境,用FineDataLink把库存数据加载进去,加载完还要校验——比如查某产品的销量和库存,看看和业务系统里的数对不对,有没有缺数、重复数。
还有一点要注意,改完之后要给业务人员培训——比如原来业务人员只会查销售数据,现在加了库存数据,得告诉他们“怎么关联两个事实表查数据”,不然改了模型也没人会用,等于白改。
Q2:选模型的时候,技术团队说“雪花模型规范”,业务团队说“维度模型好用”,该听谁的?
A:听业务团队的,但要跟技术团队沟通好,找个平衡点。因为数据仓库最终是给业务用的——技术团队觉得雪花模型规范,但业务团队用的时候要连七八张表,查个数据得写复杂SQL,最后还是得找技术团队帮忙,技术团队反而更累;而维度模型业务团队自己就能用,不用麻烦技术,大家都省事。
当然,也不能完全不听技术团队的——比如技术团队担心维度模型冗余多、以后数据量大了存储不够,那可以跟技术团队商量:先用维度模型,以后数据量大了,用FineDataLink把维度表拆成雪花模型的子表,慢慢过渡。这样既满足了业务团队“好用”的需求,又解决了技术团队“冗余”的担心。
关键是要记住,数据仓库不是“技术炫技的工具”,是“服务业务的工具”。要是建出来的模型业务团队不用,再规范也没用,你懂我意思吗?
Q3:数据仓库模型建好后,加载数据老是出错,是模型选得不对吗?
A:不一定是模型的问题,先排查原因,别一出错就怪模型。常见的出错原因有三个,你可以对着看看:
- 第一个是“数据格式不统一”——比如你选了维度模型,事实表里的“产品ID”设的是数字格式(比如12345),但数据源里的“产品ID”有的带字母(比如C12345),加载的时候就会出错。这种情况跟模型没关系,是数据清洗没做好,用FineDataLink在加载前加个“格式转换”步骤,把带字母的“产品ID”改成纯数字就行。我之前有个客户就犯过这错,以为是维度模型不好,后来发现是格式的问题,改完就好了。
- 第二个是“表关联错了”——比如你选了星座模型,销售事实表应该关联共享的“产品维度表”,结果不小心关联了自己建的“旧产品表”,加载的时候就会出现“产品ID对不上”的错。这种是配置问题,跟模型没关系,改改关联字段就行。
- 第三个才可能是“模型设计有问题”——比如你选了雪花模型,把“地区维度表”拆成了“国家表、省表、市表”,但事实表里的“市ID”在市表里没有(比如漏了某个市的记录),加载的时候就会出现“孤儿数据”。这种情况才要改模型,比如把漏的市记录补上,或者调整维度表的拆分方式。
所以加载出错了,先查数据格式、关联配置,最后再看模型。别上来就否定自己选的模型,不然可能绕很多弯路,还解决不了问题。