在数据团队待久了,总会遇到两种让人头疼的情况:
其实数据建模这事儿,就是把业务需求和技术实现连起来的那根线,看着基础,却藏着不少坑。它真不是画几张图、写几行代码那么简单,得真懂业务逻辑,还得算着技术成本,甚至得提前想到以后可能会变的地方,是个实打实的系统活儿。
今天我就不跟你扯教科书上的理论了,就从实际应用的角度,把数据建模的全流程拆解开,重点说说这四个核心问题:
数据建模第一步,80%人都会踩坑——把需求分析做成了简单记录。
业务方说:“我要用户复购率的周环比数据。”技术同学记下来,转头就从订单表里取“下单时间”“用户ID”“金额”,按周分组一算。
结果交上去的时候,业务方就问了:
“预售订单怎么没算进去?为啥用支付时间不是下单时间?怎么只算了APP端的数据?”
问题出在哪?
需求分析根本不是原样转述,而是得翻译。业务方提需求的时候,往往带着他们自己的业务语境,模糊不清是常有的事。
这时候,数据建模就得把需求拆成三个关键部分:
就拿复购率来说:
目标不一样,模型里的字段设计、关联的维度,那差别可就大了:
业务方说“用户行为数据”,可能在他们看来,默认就包括APP、小程序、H5三端的点击记录,但技术这边就得问清楚:
边界要是没划清:
模型上线后,肯定就得陷入“补数据-改模型”的循环里,没完没了。
同样是“销售额报表”:
说白了,使用场景决定了模型的细致程度和冗余情况——老板要的是整体情况,算法要的是细节特征,模型得跟这些场景匹配上才行。
所以跟业务方沟通需求的时候,拿着“5W1H”清单去问细节:
需求分析清楚了,就到模型设计这一步了。这一步的核心,就是用结构化的模型语言,把业务逻辑固定成能计算的资产。
数据建模的方法不少,像维度建模、实体关系建模、数据湖建模等等。但实际干活的时候,最常用的还是维度建模,特别是星型模型和雪花模型。
为啥呢?
因为它够简单——
业务过程就是模型里的“核心事件”,比如:
它必须是能量化、能追踪的具体动作,不能是抽象的概念。比如说“用户活跃”是一种状态,它对应的业务过程应该是“用户登录”“用户点击”这些具体动作。
维度就是看业务过程的角度,用来回答“谁、何时、何地、什么条件”这些问题。比如分析“用户下单”,可能涉及的维度有:
要注意的是:
维度得“全面准确”,但别“过度设计”。也就是说维度设计得基于当前的业务需求,同时留点儿扩展的空间。
度量是业务过程的“量化结果”,必须是数值型的、能聚合的字段,像订单金额、商品销量、支付转化率这些都是。
这里有个容易被忽略的点:度量得明确“计算规则”。比如说:
规则不统一,模型输出的指标就容易让人产生误解。
怎么选呢?
主要看查询效率:
用过来人的经验告诉你,优先选星型模型。在大数据的场景下,JOIN操作特别费计算资源,星型模型能明显提高查询速度。
要是维度需要细分:
可以把常用的维度字段合并到事实表里,做成“宽表”来优化,别动不动就拆成雪花结构。
模型设计好了,就该落地实施了。这一步难的不是写代码,而是在“模型够不够好”和“工程上能不能实现”之间找到平衡。
数据仓库的分层设计(ODS→DWD→DWS→ADS)是实施阶段的基础。每一层的职责得明确:
具体怎么做数据转换?
使用 API 输出,实现将 API 数据写入指定接口,将数据库或者其他形式的数据生成为 JSON 格式,以便进行数据交互。可以借助数据集成与治理一体化平台FineDataLink,使用 JSON 生成算子,生成 JSON 格式数据,满足复杂业务场景下的数据清洗、转换和同步等需求。
ETL(抽取-转换-加载)是模型落地的关键。很多团队在这一步容易出问题:
正确的打开方式是:
不同的模型场景,得用不同的存储介质:
要注意的是:
别为了用新技术而选复杂的存储方式。比如存用户画像,要是没有强一致性的需求,用MySQL加Redis的组合,可能比用HBase更简单高效。
数据模型上线了不算完,它的生命周期长着呢。随着业务发展,模型得不断迭代——这一点很多团队都容易忽略,最后往往要付出额外的成本。
出现这些情况,就得考虑优化模型了:
迭代不能拍脑袋决定,得看数据反馈进行策略调整:
数据建模是把业务价值和技术实现连起来的“结合点”,一个好的模型:
还想跟你说句实在话:“先让模型能用起来,再慢慢让它变好。”别追求一开始就做出“完美模型”,在业务迭代中不断优化,这才是数据建模最实在的经验。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。