QA:数仓中表的分层,怎样才合理?
(该问题来自于一位热心好学的读者。非常抱歉,过了许久才提笔回答。
由于没有正儿八紧地做过数仓开发,仅凭个人浅薄的理解来回答该问题。)
在数仓中,对表进行分层,我理解有三层含义,其一是在物理资源上划分(存储资源&运算资源),其二是表名称上区隔,其三是使用权限上做切分。后两条为必要条件。
分层的终极目的,就是提高数据应用的效率。是否合理也许很难有刚性的标准,但以我的观察,需要具备如下特征,即可称为合理:
- 不同用户角色与表的层次,有明确的对应关系,但未必要求一对一。比如,分析师、运营、数据研发、产品经理、决策者等,依据职能边界和数据消费特点,对应不同层次的使用侧重。
- 信息的聚合程度,在不同层次上有明显的不同。越上层的表,信息聚合度越高,量化程度也越高。
- 表任务的资源分配、运行成本和效率要求,在不同层次上有显著区别。
- 数据安全等级和权限开放的程度,在不同层次上也有所区别。
下图呈现我对分层的理解:
老树之见-数仓表的分层逻辑.jpg
如上图左边部分,一般来说,表都会分为生产层(ODS)、公共明细层(DWD)、公共汇总层(DWS)和应用层(ADS)。普遍来说,合理的数仓分层,可做如下表述:
生产层指从各系统中抽取的数据,数量众多且主题划分模糊,没有做整合。一般除了数据研发和业务产研,不向其他角色开放。
经过一层ETL后,成为公共明细层。公共明细层里的表,往往主题明确,且主题下的各种细节数据已经完成拼装;如许多公司会做订单大宽表,即把各种有必要的信息标准化后,都成为宽表字段。除了产研,这层表会向分析师和运营等角色开放。
公共汇总层是在明细层基础上再做聚合,往往是将重要信息加工为指标表和维度表,并将高频使用的维度退化到指标表中。这也就意味着,汇总层表能较好的支撑业务分析。这层表往往是使用者最多,业务需求最强的,建设是否健全,是公司内部分析提效的关键。另外,这层表的数据安全管理也最需要重视。
应用层表相对特殊,它的内容会来自于之下的各层表。它一般只服务与具体的应用产品,所以对产出时间和运行效率要求较高,往往也不对业务运营、分析师等角色开放。
DWD+DWS层,往往称为公共层。公共层建设得越健壮,整个公司的数据应用效率越高。层次越往上,与公司业务分析的耦合度或者说紧密度越高。如上图右侧内容,则是从我角度更细的分层的表述:
DWD层一分为二,DWD-Process层可理解为业务过程的抽象。比如线上零售业务中,用户浏览、收藏购物车、下单、支付、收货各环节,就是业务过程。DWD-Collection可理解为从各业务过程明细表中,将高频使用且重要的信息提取,成为一个完整业务链条的信息集成表。比如订单宽表,就是把下单各个业务过程中,核心的环节进行整合,以便在交易分析时提高效率。
DWS层也能一分为二。Objective一层将可量化的信息提取,聚合到业务对象颗粒度。还是以线上零售为例,用户、店铺、商品等,都是业务对象;而将重要的指标和维度整个为业务对象的汇总表,显然能大幅度降低分析时的数据获取成本。Department层更靠近业务,往往按业务部门的需求,作出一套汇总表。该部门成员能够以很低的上手成本,迅速应用全面的数据。
以上就是我对数仓表分层的理解,希望能给读者们带来帮助。有更多问题,欢迎关注公众号:老树之见,或发邮件huchenchuan@hotmail.com进行交流。