资讯动态

离线数仓DWS层设计实战:主题域划分、口径管理与宽表避坑指南

发布时间:2026/10/26 6:27:34 来源:尧图企业网站定制
数仓分层这件事做得久了会发现一个规律ODS和DWD层的设计大家往往讨论得热火朝天到了DWS层反而容易变成照着宽表需求堆字段的流水线作业。我见过不少团队DWD层做得规规矩矩、清洗规范、维度建模也到位结果一到DWS层就开始失控——指标口径满天飞、宽表越建越多、命名五花八门、下游用数的人根本分不清哪张表能信。离线数仓的DWS层Data Warehouse Summary汇总数据层恰恰是整个数仓体系里最考验设计功力的地方它承上启下往上要对接ADS层的报表和应用往下要消化DWD层的明细数据中间还得把业务口径固化下来。这篇文章想聊的就是DWS层到底该怎么设计、怎么落地、怎么避坑适合正在搭建或重构离线数仓的数据开发、数仓建模同学参考也适合想搞清楚为什么我们数仓的指标老是对不上这个问题的朋友。1. DWS层在整条数仓链路里到底扮演什么角色1.1 从一次指标口径争议说起先说一个我印象很深的场景。某公司的运营和财务同时看日活跃用户数运营报表显示80万财务口径算出来65万两边开会吵了一下午。最后排查发现运营用的是DWS层一张按天汇总的宽表统计的是当天有任意行为日志的用户财务用的是另一条链路统计的是当天有登录且完成实名认证的用户。两张表都叫日活但口径完全不同而且都躺在DWS层里谁也不知道对方的存在。这个问题的根子不在DWD层也不在ADS层恰恰在DWS层。DWS层的核心职责之一就是把业务口径沉淀成可复用、可追溯的汇总数据让下游不用每次都从明细重新算。但如果DWS层本身没有统一的口径管理那它就从口径收敛器变成了口径放大器——每张宽表都自带一套口径下游越用越乱。所以理解DWS层的角色第一件事就是认清它不是随便汇总一下的中间层而是业务口径的固化层。DWD层解决的是数据干净不干净、维度关联对不对的问题DWS层解决的是这个指标到底怎么算、算出来的数能不能被业务认可的问题。这两件事的性质完全不同前者偏技术后者偏业务。1.2 DWS层与DWD、ADS的边界划分很多团队在分层边界上犯迷糊我梳理一个比较实用的判断标准层级核心职责数据粒度典型产出DWD明细清洗、维度退化、事务一致性最细粒度一行一事件/一单据明细事实表、维度表DWS按主题汇总、口径固化、轻度聚合天/周/月 主题维度主题宽表、汇总指标表ADS面向应用的个性化加工按报表/接口需求定制报表结果表、接口数据表关键判断点在于DWS层的聚合应该是可复用的聚合ADS层的加工应该是面向具体应用的加工。举个例子用户每日下单金额这种按用户日期汇总的指标多个报表都要用就应该沉在DWS层而某张报表需要的Top100用户排行榜这种带具体排序和截断逻辑的就属于ADS层的活。我见过一种反模式把ADS层的报表逻辑直接塞进DWS层导致DWS宽表字段动辄三四百个每加一张报表就加一批字段。这种表维护成本极高而且字段之间的口径关系没人说得清。正确的做法是DWS层保持主题内聚、口径稳定ADS层去做应用适配、灵活变化。1.3 为什么DWS层最容易变成技术债重灾区DWS层之所以容易积累技术债有三个结构性原因。第一它离业务最近但又不在最前端需求变化时往往被顺手改一下第二它的产出直接被业务消费一旦口径出错影响面大但出错时又很难定位是哪一层的问题第三它的设计缺乏像DWD层那样成熟的建模方法论约束很多人凭感觉建宽表。我的经验是DWS层必须建立主题域口径字典的双重约束。主题域决定这张表归谁管、服务哪类业务口径字典决定每个指标字段的计算逻辑、数据来源、更新频率。没有这两样东西DWS层迟早会失控。后面几个章节会详细讲怎么落地这套约束。2. 主题域划分DWS层设计的第一道分水岭2.1 按业务过程还是按分析主题来切DWS层的主题域划分业内常见两种思路一种按业务过程切下单、支付、退款、登录一种按分析主题切用户、商品、交易、流量。这两种切法没有绝对对错但适用场景不同。按业务过程切的好处是与DWD层对应关系清晰一张DWD事实表基本能对应一张DWS汇总表开发时映射关系简单。坏处是下游用数时经常需要跨多个主题拼数据比如分析用户从浏览到下单的转化就得同时关联流量主题和交易主题用起来别扭。按分析主题切的好处是面向分析场景一张用户主题宽表就能覆盖用户的大部分分析需求下游体验好。坏处是主题边界容易模糊比如用户下单这件事到底算用户主题还是交易主题团队内部经常扯皮。我实际项目里采用的是混合策略以分析主题为主干业务过程作为主题内的子分类。具体来说先定用户、商品、交易、流量、营销这几个大主题每个主题内部再按业务过程组织汇总表。这样既保证了下游使用的便利性又保留了与DWD层的清晰映射。2.2 主题域边界模糊时的裁决原则主题边界扯皮是常态我给一个实操中比较管用的裁决原则看这张汇总表的主键和主要分析视角。如果主键是用户ID、分析视角是这个用户怎么样就归用户主题如果主键是商品ID、视角是这个商品卖得怎么样就归商品主题如果主键是订单或交易流水视角是这笔交易的状态和金额就归交易主题。举个容易混淆的例子用户最近30天购买品类偏好。这张表主键是用户分析视角是用户画像虽然数据来源是交易明细但归属应该是用户主题。反过来某品类最近30天的复购用户数主键是品类视角是商品运营就该归商品主题。同一个数据源因为主键和分析视角不同归属就不同这个判断标准比数据从哪来更可靠。还有一个补充原则一张DWS表只服务一个主题跨主题的汇总放到ADS层或单独建跨域汇总表。我见过把用户、商品、交易全塞进一张万能宽表的做法短期看省事长期看就是灾难——字段爆炸、口径混乱、更新互相牵制。2.3 主题域与组织架构的映射关系主题域划分最好能和业务组织架构有一定映射但不是简单照搬。映射的价值在于责任归属清晰——用户主题的DWS表由负责用户增长的团队提需求、认口径商品主题由商品运营团队负责。这样口径争议时能找到业务owner拍板而不是数据团队自己猜。但要注意组织架构会调整主题域不能跟着频繁变。我的做法是主题域保持相对稳定按业务本质划分在主题内部用子主题或标签来适配组织变化。比如营销组织调整了营销主题下的子分类可以调整但营销这个大主题不动。这样既保证了责任可追溯又避免了主题域频繁重构带来的下游震荡。3. 汇总粒度设计日汇总、月汇总与累积快照的取舍3.1 为什么日粒度是DWS层的基本盘DWS层最常见的粒度就是按天汇总这不是随便定的。天粒度是业务分析的最小公约数——大部分报表按天看周、月、季度都可以从天粒度上卷得到。如果DWS层只做月汇总那想看周数据就得回DWD重算失去了汇总层的意义。但日粒度汇总有个坑不是所有指标都能从天粒度无损上卷。可加性指标如订单金额、订单数从天汇总到月没问题直接求和即可半可加性指标如库存量、账户余额不能跨时间求和月汇总不能简单把30天的日库存加起来得取月末快照或平均值不可加性指标如去重用户数、转化率更不能直接上卷日活相加不等于月活。所以DWS层设计日汇总表时必须对每个指标标注它的可加性类型。我的习惯是在口径字典里给每个指标打三个标签之一可加、半可加、不可加。不可加指标如果要支持月汇总要么在DWS层同时产出月粒度的去重结果要么在ADS层用明细去重。这个决策要在设计阶段就定下来不能等下游发现数不对再补。3.2 累积快照表在DWS层的特殊价值除了日汇总累积快照表accumulating snapshot在DWS层也很有用尤其适合有明确生命周期的业务过程比如订单从下单到支付到发货到完成的状态流转。累积快照表一行对应一个订单随着状态推进不断更新各阶段的时间戳和金额。这种表放在DWS层的好处是下游分析订单履约时效、各阶段转化率时不用自己关联多张状态表。但要注意累积快照表的更新成本——它需要按主键做upsert对存储和计算都有要求。我的经验是累积快照表只对核心业务过程建比如交易订单非核心过程用日快照或事件表代替避免维护负担过重。3.3 粒度组合的常见配置与实测取舍实际项目里DWS层通常是多种粒度并存的。我整理一个常见的粒度组合配置供参考粒度类型适用指标更新方式存储成本典型场景日汇总可加性指标为主每日增量中日常经营报表月汇总可加需去重的指标每月全量或增量低月度经营分析累积快照生命周期类过程按主键upsert中高履约时效分析小时汇总实时性要求高的可加指标每小时增量高大促实时看板实测下来日汇总月汇总的组合能覆盖80%的需求累积快照按需建小时汇总只在有明确实时诉求时才上。不要一上来就把所有粒度都建全那是典型的过度设计——存储和计算成本翻倍但大部分粒度根本没人用。我一般建议先建日汇总等下游明确提出月粒度性能诉求时再补月汇总用需求驱动粒度扩展。4. 指标口径管理DWS层最容易被低估的核心工作4.1 口径字典应该长什么样口径字典是DWS层的宪法但很多团队要么没有要么写成一堆没人看的文档。我理想中的口径字典每个指标至少包含这些字段指标名称、业务定义一句话说清算什么、计算逻辑SQL伪代码或公式、数据来源哪张DWD表哪些字段、过滤条件哪些数据要排除、可加性类型、更新频率、业务owner、变更历史。举个具体例子有效订单金额这个指标口径字典里应该写清楚业务定义是用户实际支付且未退款的订单金额计算逻辑是sum(pay_amount) where order_status in (已支付,已完成) and refund_status无退款数据来源是DWD层交易明细表的pay_amount、order_status、refund_status字段过滤条件是排除测试订单和内部订单可加性是可加owner是交易产品团队。这份字典的价值在于当两个人对同一个指标有分歧时翻字典就能裁决而不是靠谁嗓门大。而且新人接手时看字典就能理解指标含义不用挨个问老人。4.2 指标命名规范让表名和字段名自解释DWS层的命名混乱是通病我见过字段名叫cnt1amt2flag的宽表除了原作者没人看得懂。命名规范这件事投入产出比极高值得在项目初期就定死。我的命名规范大致是这样表名用dws_主题_业务过程_粒度的结构比如dws_user_order_di用户下单日汇总、dws_trade_pay_df交易支付累积快照。字段名用修饰词_度量词的结构比如paid_order_cnt已支付订单数、refund_amt退款金额。粒度后缀统一用di日增量、df日全量、mi月增量这类约定。关键是修饰词要能体现口径差异。同样是订单数paid_order_cnt和created_order_cnt必须能一眼区分。我建议团队维护一个修饰词词表规定哪些前缀是允许的、各自什么含义新字段必须从词表里选词不能自创。这个约束听起来繁琐但能省掉后面无数的沟通成本。4.3 口径变更的版本管理机制口径不是一成不变的业务调整、bug修复都会导致口径变更。问题在于口径一变历史数据要不要重算下游已经基于旧口径做的分析怎么办这些都需要版本管理机制来兜底。我的做法是给口径字典加版本号每次变更记录变更原因、影响范围、生效日期。对于口径变更分两种情况处理如果是bug修复比如之前漏了某个过滤条件历史数据要重算并在字典里标注v2修正了v1的XX问题如果是业务口径调整比如有效订单的定义变了历史数据不重算新老口径并存一段时间下游按需选择。这里有个实操细节口径变更时DWS表最好保留旧字段一段时间加个_legacy后缀而不是直接改字段逻辑。这样下游有缓冲期迁移不会因为口径变更导致报表突然跳变。等下游都迁移完了再下线旧字段。这个灰度下线的做法能避免很多半夜被叫起来排查数不对的尴尬。5. 宽表设计字段膨胀与查询性能的平衡术5.1 宽表到底该多宽DWS层宽表的字段数量是个需要拿捏的问题。太窄了下游要关联多张表用起来麻烦太宽了维护成本高、更新慢、字段口径难管理。我见过的极端案例是一张宽表400多个字段每次加需求就加字段最后没人敢动这张表。我的经验值是单张DWS宽表控制在80到150个字段比较合理。这个区间内能覆盖一个主题的核心分析需求又不至于失控。超过150个字段就该考虑拆表了——按分析场景拆成基础宽表扩展宽表或者按更新频率拆成日更宽表月更宽表。拆表的判断标准是字段的使用相关性。如果一批字段总是被一起查询就放一张表如果两批字段几乎不一起用就拆开。我一般会看下游查询日志统计字段的共现频率共现高的放一起。这个数据驱动的拆表方法比拍脑袋靠谱。5.2 维度冗余与关联成本的权衡宽表的核心价值是把常用维度冗余进来减少下游关联。但冗余哪些维度、冗余多少需要权衡。冗余太少下游还得关联维度表宽表价值打折冗余太多维度变化时要同步更新宽表维护成本上升。我的原则是高频查询、低频变化的维度优先冗余。比如用户宽表里冗余用户等级、注册渠道、所在城市这些维度因为它们查询频率高、变化不频繁。而像用户实时积分这种高频变化的就不适合冗余进宽表容易导致宽表频繁更新。还有一个细节冗余维度时要明确冗余的是当前值还是历史值。比如订单宽表里冗余用户等级是冗余下单时的等级还是当前的等级这两个含义完全不同必须在字段名和口径字典里说清楚。我一般建议冗余业务发生时的快照值因为分析时通常关心的是当时是什么等级的用户下了这单而不是这个用户现在是什么等级。5.3 分区策略与更新机制的设计DWS宽表的分区策略直接影响查询性能和更新成本。最常见的按日期分区日增量表按天分区日全量表每天覆盖一个分区。但有些宽表需要按其他维度分区比如按业务线、按地区这就要看查询模式了。更新机制上日增量表用insert overwrite覆盖当天分区累积快照表用merge/upsert按主键更新。这里有个坑累积快照表的upsert如果数据量大性能会很差。我的做法是对累积快照表做分区裁剪只更新有变化的订单所在分区而不是全表merge。具体实现上可以先算出当天有状态变化的订单ID集合只对这些ID做merge能大幅降低更新成本。另外宽表的更新要设计好依赖关系。DWS宽表通常依赖多张DWD表更新顺序不能乱。我一般用调度系统配好依赖确保上游DWD表跑完再跑DWSDWS跑完再跑ADS。这个依赖链要可视化出问题时能快速定位卡在哪一环。6. 离线调度的依赖编排与数据质量卡点6.1 DWS任务在调度链路中的位置DWS任务在整条离线链路里处于中游上游是DWD清洗任务下游是ADS报表任务。它的调度时间窗口取决于上游DWD什么时候跑完、下游ADS什么时候要数据。这个时间窗口往往很紧张尤其是T1报表要求早上8点前出数的情况。我的经验是DWS任务要尽量早启动、并行化。具体做法是把DWS宽表按主题拆成多个并行任务而不是串行跑一张大宽表。比如用户主题、交易主题、商品主题的DWS任务可以并行只要它们依赖的DWD表都就绪了。这样能把整体耗时压下来。但并行化有个前提任务之间不能有数据依赖。如果交易主题的DWS表依赖用户主题的DWS表那就不能并行。所以设计时要尽量让主题间解耦跨主题的依赖放到ADS层处理。这个原则和前面说的主题域划分是一致的——主题内聚、主题间解耦。6.2 数据质量卡点的设置位置与规则DWS层是数据质量卡点的关键位置因为它是明细到汇总的转换点很多数据问题在这里会放大。我一般在这几个位置设卡点第一DWS任务执行前的上游就绪检查——确认依赖的DWD分区数据存在且行数在合理范围。如果上游某张表当天数据为空或骤降直接阻断DWS任务避免用错误数据算出错误汇总。第二DWS任务执行后的结果校验——检查汇总表的行数、关键指标的量级是否在历史波动范围内。比如日活用户数突然比昨天跌了50%就要告警。这类校验用简单的阈值规则就能覆盖大部分异常。第三跨表一致性校验——比如DWS层的订单金额汇总应该和DWD层订单明细的金额总和一致在相同过滤条件下。这种校验能发现汇总逻辑的bug。卡点规则不要设太多太细否则误报率高大家就麻木了。我一般每个主题设3到5条核心校验规则聚焦在行数、关键指标量级、跨层一致性这几类。6.3 任务失败后的重跑与补数策略离线任务失败是常态关键是失败后怎么快速恢复。DWS任务失败的重跑要考虑两个问题重跑是否幂等、补数范围多大。幂等性方面日增量表用insert overwrite覆盖分区天然幂等重跑没问题。累积快照表的upsert如果逻辑正确也幂等但要确保重跑时不会重复累加。我见过累积快照表重跑导致金额翻倍的案例根子是upsert写成了insert。所以累积快照表的更新逻辑要特别小心最好在测试环境验证重跑幂等性。补数方面如果DWS任务连续失败几天恢复后要补跑这几天的分区。补数任务要控制并发避免一次性补太多天把集群压垮。我的做法是补数按天串行或小批量并行同时监控集群资源动态调整并发度。7. 从DWD到DWS的加工逻辑聚合、去重与窗口计算7.1 聚合逻辑的编写要点从DWD到DWS的聚合看起来就是group by加sum/count但实际写起来有不少讲究。第一个要点是过滤条件要前置。很多汇总逻辑的过滤条件比如排除测试订单、只算有效状态应该在聚合前就过滤掉而不是聚合后再过滤否则会影响count类指标的准确性。第二个要点是null值处理。DWD层的字段可能有null聚合时sum遇到null会跳过count(字段)也会跳过null但count(*)不会。这些差异会导致指标口径不一致。我的习惯是在DWD层就把关键字段的null处理掉比如金额null补0DWS层聚合时就不用再操心null的问题。第三个要点是多指标一次聚合。同一张DWS表里的多个指标尽量在一次group by里算完而不是多次扫描DWD表。比如订单汇总表要算订单数、金额、退款数、退款金额就在一个SQL里用条件聚合sum(case when...)一次算完减少IO。7.2 去重指标的精确计算与近似取舍去重指标UV、去重用户数是DWS层的难点。精确去重要用count(distinct)数据量大时性能很差。近似去重可以用HyperLogLog之类的算法性能好但有误差。我的取舍原则是核心考核指标用精确去重辅助分析指标可用近似去重。比如日活用户数是核心考核指标必须精确而浏览过某品类的用户数这种辅助分析指标可以用近似去重误差在可接受范围内。精确去重的性能优化可以用预聚合的思路——在DWS层按天精确去重后存结果月粒度去重时不是把日结果相加那样会重复计数而是要么回DWD重新去重要么用bitmap之类的数据结构存储去重结果支持上卷。bitmap方案在用户量可控时很好用但用户量特别大时存储成本高要权衡。7.3 窗口计算的常见场景与实现DWS层经常要做窗口计算比如最近7天最近30天的滚动指标。这类计算有两种实现方式一种是在DWS层物化每个窗口的结果每天算一次最近7天、最近30天查询时直接取另一种是查询时实时计算窗口。物化的好处是查询快坏处是存储成本高、更新逻辑复杂每天要重算所有窗口。实时计算的好处是灵活坏处是查询慢。我的经验是高频查询的固定窗口如最近7天、最近30天物化低频或自定义窗口实时算。物化窗口指标时要注意窗口的边界定义。最近7天是包含今天还是不含今天是自然日还是滚动24小时这些必须在口径字典里写清楚否则不同人理解不同算出来的数对不上。我一般约定最近N天指含当天在内的N个自然日并在字段名里体现比如user_active_7d_cnt。8. 存储格式、压缩与查询引擎的选型考量8.1 列式存储为什么是DWS层的主流选择DWS层的表基本都是列式存储Parquet、ORC这类格式这不是跟风而是由DWS层的查询特征决定的。DWS表字段多、查询时通常只取部分列、聚合计算多列式存储的列裁剪和向量化计算能大幅提升性能。对比行式存储列式存储在DWS场景的优势很明显查询只读需要的列IO大幅减少同列数据类型一致压缩率高聚合计算可以向量化执行。我实测过同一份数据行存和列存的查询耗时宽表聚合场景下列存能快3到5倍。选Parquet还是ORC主要看查询引擎。如果主要用Spark查询Parquet生态更成熟如果用Hive或Presto/TrinoORC的谓词下推和压缩效果可能更好。这个没有绝对优劣跟着团队现有技术栈走就行不必为了追求最优而引入不熟悉的格式。8.2 压缩算法的选择与实测对比压缩算法的选择影响存储成本和查询性能。常见的有Snappy、Gzip、Zstd。Snappy压缩解压快但压缩率一般Gzip压缩率高但解压慢Zstd在压缩率和速度之间比较平衡。我的实测经验是热数据最近几个月、查询频繁用Snappy或Zstd优先保证查询速度冷数据历史归档用Gzip优先省存储。这个冷热分层的压缩策略能在成本和性能之间取得不错的平衡。还有一个细节压缩是按文件或按块进行的小文件多会导致压缩效果差、查询时打开文件开销大。所以DWS表要控制文件数量通过合理分区和合并小文件来优化。我一般建议单分区文件数控制在合理范围太多就触发小文件合并任务。8.3 查询引擎适配与性能调优要点DWS表的查询引擎可能是Hive、Spark SQL、Presto/Trino、ClickHouse等不同引擎的优化点不同。Hive适合大批量ETLSpark SQL内存计算快适合复杂聚合Presto/Trino适合交互式查询ClickHouse适合高并发点查和实时聚合。DWS层作为汇总层通常会被多种引擎查询。我的做法是DWS表用通用的列式格式存储Parquet/ORC让不同引擎都能读然后针对高频查询场景做针对性优化。比如交互式查询多就在Presto/Trino侧做好分区裁剪和谓词下推高并发点查多可以考虑把部分DWS表同步到ClickHouse。性能调优的通用要点分区字段要出现在查询条件里否则全表扫描小文件要合并统计信息要收集帮助优化器选执行计划大表join小表时注意广播。这些是通用原则具体到每个引擎还有各自的调优参数需要结合实际情况调。9. 实际落地中的几个高频坑与应对9.1 坑一宽表字段口径漂移这个坑前面提过但值得单独说。宽表字段口径漂移的典型表现是同一个字段名不同时期的口径不一样但没人记录变更。比如paid_amt字段最初是支付金额后来有人改成支付金额扣除优惠券再后来有人改成支付金额扣除优惠券和退款每次改都没记录导致历史数据和当前数据不可比。应对方法就是前面说的口径字典加版本管理外加一个硬约束改字段逻辑必须走变更流程不能直接改SQL上线。变更流程可以轻量但必须记录变更原因和影响范围。这个约束执行一段时间后团队会形成习惯口径漂移问题能大幅减少。9.2 坑二汇总表与明细表对不上账DWS汇总表和DWD明细表对不上账是排查起来最耗时的问题之一。常见原因有几个过滤条件不一致汇总时多过滤或少过滤了某些数据、关联维度导致的行数变化汇总时join维度表产生重复或丢失、null值处理不一致。排查这类问题我的方法是逐层对齐先确认DWD明细在相同过滤条件下的汇总结果再对比DWS表的汇总结果差异定位到具体是哪个环节引入的。具体操作上写一个对账SQL把DWD按DWS的维度group by后和DWS表full join看哪些维度的值不一致再针对不一致的维度下钻排查。预防这类问题靠的是前面说的跨层一致性校验卡点。每天跑一次对账发现不一致立即告警比等到业务方发现数不对再来排查要主动得多。9.3 坑三累积快照表的更新陷阱累积快照表的更新逻辑容易出问题典型的有两个一是重跑不幂等导致数据重复累加二是状态回退处理不当比如订单从已完成回退到退款中累积快照表没正确处理。应对方法更新逻辑用merge/upsert而非insert确保按主键更新状态回退要在更新逻辑里显式处理不能假设状态只前进不后退重跑前先验证幂等性可以在测试环境模拟重跑看结果是否一致。另外累积快照表最好保留每次更新的历史版本用拉链表或额外历史表方便追溯状态变化过程。9.4 坑四下游直接依赖DWS中间表有些下游为了图方便直接依赖DWS层的中间汇总表那些本意是给其他DWS表做中间结果的表而不是依赖最终的宽表。这会导致中间表不敢改、不敢下线技术债越积越多。应对方法是明确DWS层的对外表和内部表边界。对外表是承诺给下游用的、口径稳定的表内部表是中间过程表随时可能调整。内部表命名上加标识比如加_tmp或_int后缀并在元数据里标注内部使用不承诺稳定性。下游要用数只能依赖对外表。这个边界划清楚中间表才能自由演进。10. 一些关于DWS层设计的个人体会做数仓这些年我越来越觉得DWS层的设计功力体现在克制两个字上。克制加字段的冲动克制建宽表的冲动克制把ADS逻辑下沉的冲动。每加一个字段、每建一张表都要问一句这个真的需要沉在DWS层吗能不能在ADS层解决能不能用现有字段组合出来另一个体会是DWS层的价值不在技术多复杂而在口径多可靠。一个字段不多、但每个字段口径都清晰可追溯的DWS层比一个字段几百个但没人说得清口径的宽表有价值得多。所以如果让我给DWS层建设排优先级口径管理排第一主题划分排第二宽表设计排第三性能优化排最后。前面三样做好了性能问题往往是局部的、可优化的前面三样没做好性能再好也是一堆没人敢用的表。最后分享一个实操小技巧DWS层建好后定期做一次表使用率盘点统计每张表被哪些下游查询、查询频率如何。使用率低的表考虑下线或合并使用率高的表重点保障质量和性能。这个盘点每季度做一次能有效控制DWS层的表数量膨胀也能发现哪些表是真正的核心资产。数仓分层不是建得越多越好而是建得越准越好。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑