数仓分层讲了半天面试官说'太教科书了'——怎么讲出自己的思考
先说结论
讲分层要讲'为什么'不只讲'是什么'。三个方向让你的分层不教科书:① 讲你的分层和标准四层有什么不同(多了什么少了什么为什么);② 讲某一层的具体设计决策(为什么DWD层做了XX处理);③ 讲分层带来的具体业务价值(分层前后的对比)。
先把这段讲顺;面试官追问时,再展开下面的原理和细节。
详细讲解
面试时背'ODS原始层、DWD明细层、DWS汇总层、ADS应用层'谁都会。面试官听100个候选人讲的都一样——背概念谁不会?他想听的是:你们的分层和教科书有什么不同?为什么这样分?某一层有没有做特殊处理?在某短剧出海公司我的数仓只有三层(没有DWS),面试时讲'为什么我们没有DWS层'比背四层架构有意思得多。
教科书回答 vs 有思考的回答
| 问题 | 教科书回答(0分) | 有思考的回答(满分) |
|---|---|---|
| 你们分几层? | ODS/DWD/DWS/ADS四层 | '我们只分了三层没有独立DWS——因为业务指标变化快预聚合容易过时' |
| ODS层做什么? | 存储原始数据 | 'ODS层我们做了格式统一——5个广告平台的字段名/类型/时区全部标准化' |
| DWD层怎么设计? | 清洗明细数据 | 'DWD层最大的设计是跨平台字段映射——Facebook叫spend TikTok叫cost统一成ad_cost' |
| 为什么用星型模型? | 星型模型查询快 | '维度表都很小(最大50万行)JOIN开销可接受,比雪花少一层JOIN分析师用起来更简单' |
我怎么讲'为什么没有DWS层'
背景:在某短剧出海公司,广告投放的指标需求变化非常快——这周要看CPA下周要看LTV后面又要看7日ROAS。如果每个指标都在DWS层预聚合,新增一个指标就要改DWS表重跑历史数据。
我的做法:DWD层做得足够干净(字段标准化+维度关联已完成),ADS层直接在DWD上做现场聚合。用Metabase的自定义查询功能让运营自己写简单SQL做聚合——灵活度最高。
Trade-off:没有DWS的代价是查询不够快——复杂聚合要扫描DWD全量数据。但我们的DWD日均只有几GB用MaxCompute几秒就能跑完。如果数据量增长到TB级我会重新引入DWS层做核心指标的预聚合。
面试效果:讲完后面试官追问了三个问题——'数据量到多大你会引入DWS''预聚合和现场聚合的性能拐点在哪''运营自己写SQL你们怎么管控质量'——这些追问说明他对我的回答感兴趣而不是觉得我在背书。
每一层可以讲出深度的点
ODS层的深度:'ODS不是简单的数据搬运——我们在ODS层就做了数据格式标准化。5个广告平台的API返回格式完全不同(有的是JSON有的是CSV有的是嵌套结构),ODS层统一成了flat table格式方便下游处理。'
DWD层的深度:'DWD最大的挑战是跨平台字段映射——同一个概念不同平台叫不同的名字(impression/view/display都是'展示')。我建了一个字段映射配置表,新增平台只需要加映射规则不用改代码。'
DWS层的深度:'DWS的设计关键是选择预聚合的维度组合——我们有30+个维度但不能全部交叉聚合(组合爆炸)。我选了5个最高频的维度组合做预聚合覆盖了80%的查询。剩下20%的长尾查询回退到DWD现场计算。'
ADS层的深度:'ADS层不只是产出报表——还包括数据推送。核心指标每天凌晨推送到飞书群自动生成日报,异常指标(CPA波动超过20%)触发即时告警。ADS层是数据和业务的最后一公里。'
面试高频追问
追问一:你们的命名规范是什么?
'表名规则:{层}_{业务域}_{主题}_{周期}。比如dwd_ads_campaign_daily是DWD层的广告域campaign主题日表。字段名规则:{实体}_{属性},比如user_id、campaign_name、ad_cost。维度表用dim_前缀事实表用fact_前缀。命名规范写在Confluence上每个新表的CR必须检查命名。'
追问二:数据血缘怎么追踪?
'MaxCompute/Databricks自带了表级血缘——能看到每张表的上下游。字段级血缘通过SQL解析工具(比如sqllineage)实现——知道某个字段是从哪个上游字段计算来的。血缘最大的价值是影响分析——修改DWD某个字段时能知道哪些DWS/ADS表会受影响。'
追问三:分层和分域有什么关系?
'分层是纵向的(ODS到ADS),分域是横向的(用户域/交易域/广告域)。每个域在每层都有自己的表。比如广告域在ODS有ods_ads_facebook_raw,在DWD有dwd_ads_campaign_daily,在ADS有ads_ads_roi_report。分域的好处是不同业务团队各管各的域互不影响。'
总结
分层不背书讲三招:① 讲和标准不同的地方('我们没有DWS因为指标变化快');② 讲具体设计决策(字段映射/维度选择/命名规范);③ 讲trade-off(没有DWS的代价是什么、什么条件下会引入)。面试官想听的是你的思考过程而不是教科书——能说出'为什么这样做'比'做了什么'有价值得多。
下一篇聊怎么接住面试官的深度追问:Exactly-Once被追问了怎么办?
你面试讲分层时面试官觉得有深度吗?评论区聊聊~
关注「Wood聊大数据」| 9年大数据老兵,聊技术、聊职场、聊成长