数据中台

该如何设计数仓的汇总层(DWS)

2021-03-24  本文已影响0人  大数据技术与数仓

关于数据仓库的分层,似乎大家都有一个共同的认识。但涉及到每一层该如何去建模,可能每个人都有自己的理解。数据建模,毫无疑问是数仓建设的重中之重,然后,在实际的开发过程中,会把大量的时间都投入到了需求开发,往往会忽略数据建模(尤其是DWS层的建模),长此以往,数据模型变的越来越杂乱,指标口径无法统一,造成的结果就是:虽然表很多,但是却很难取数。本文主要介绍DWS层建模的基本方法论,希望对你有所帮助。

数仓为什么要分层

合理的数据仓库分层一方面能够降低耦合性,提高重用性,可读性可维护性,另一方面也能提高运算的效率,影响到数据需求迭代的速度,近而影响到产品决策的及时性。建立数据分层可以提炼公共层,避免烟囱式开发,可见一个合适且合理的数仓分层是极其重要。

通用分层设计思路

没有DWS层不行吗

当我们在做数据需求时,会不会有这样的疑问:我直接能从DWD层很方便的取出想要的数据,为什么还要多此一举建立DWS层的汇总表呢?那是不是意味着可以不用建立DWS层的表呢,答案是:可以的。但是这有一个前提,就是业务场景不复杂。从短期来看可以快速满足数据需求的开发,但是长期来看,会存在如下的问题:

DWS层设计

以分析的主题对象作为建模驱动,基于上层的应用和产品的指标需求,构建公共粒度的汇总指标表。以宽表化手段物理化模型,构建命名规范、口径一致的统计指标,为上层提供公共指标,建立汇总宽表。如:形成日,周,月粒度汇总明细,或者基于某一个维度,如商品类目粒度的汇总日表,统计便于下一步报表数据结构的组织。

DWS层的基本特点

原子指标与派生指标

所谓原子指标,即是业务过程的度量,就是明细事实表中的度量值。比如订单表,那么某个订单对应的订单金额就是一个原子指标,这个指标是伴随着订单的业务过程而产生的。

所谓派生指标,即由统计周期+修饰词+统计粒度+原子指标组合加工而成的指标

其中,统计周期:指的是想要统计的时间周期,比如天、周、月

       **修饰词**:指的是业务的约束,**通常出现在SQL的where条件中**,比如订单的下单渠道等等

       **统计粒度**:指的是维度组合,**通常出现在SQL的group by中**,比如统计商品一级类目对应的销售额,那一级类目就是统计粒度

DWS层的设计原则

关于汇总层的表建模应遵循以下的原则:

DWS层设计步骤

CREATE TABLE IF NOT EXISTS dws_asale_trd_itm_ord_1d
(
    item_id                 BIGINT COMMENT '商品ID',
    item_title               STRING COMMENT '商品名称',
    cate_id                 BIGINT COMMENT '商品类目ID',
    cate_name               STRING COMMENT '商品类目名称',
    mord_prov               STRING COMMENT '收货人省份',
    confirm_paid_amt_sum_1d DOUBLE COMMENT '最近一天订单已经确认收货的金额总和'
)
COMMENT '商品粒度交易最近一天汇总事实表'
PARTITIONED BY (ds  STRING COMMENT '分区字段YYYYMMDD')
;

关于DWS层建设的一些问题

为什么一张DWS表通常只会对应一个派生指标?

在设计DWS表的时候,很多人会把所有可以聚合的维度进行cube,这样就得到了很多个派生指标,而这些派生指标放在同一张表中无疑会增加这张表的使用难度,比如在实际的取数时,往往只关心某个统计粒度的指标。实际上cube的数据尽量放在ADS层,这样在开发数据接口或者应用层取数时都会比较方便。所以在设计DWS层时,应当遵循前文提到的一些原则,一言以蔽之,就是设计尽量体现出公共性、使用简单并且用户很容易理解。

怎么设计出完美的DWS层表?

数仓建设是一个不断迭代的过程,数据建模同样是一个不断迭代的过程。同时,业务是不断变化的,建模人员对业务的理解也是变化的,这些也就注定了建模是一个迭代过程。虽然存在这些变化,但我们在数据建模的时候同样要遵循一定的规范,切不可随心所欲。

如何评价DWS层建设的好坏?

由于数仓的建设是与业务息息相关的,数仓建设的方法论仅仅只是指引我们构建数仓的一个方向,在实际的落地执行过程中会存在各种各样的问题,且不可被这些理论所禁锢。简单一句话就是:合适就好。所以,评价模型的好坏与否,更多的是从使用者的角度出发,比如简单、易于取数、表的数量恰好。

总结

本文主要介绍了数据仓库中DWS建设的基本思路,包括DWS层的特点、设计原则以及设计步骤,并对DWS层建设存在的一些问题进行了阐述。当然,这些只是DWS层建模的一些方法论,智者见智仁者见仁,在实际的数据建模过程中可以参考这些方法论,但也要注意与具体的业务场景相结合,数据建模是建立在自己对业务的理解基础之上的,切不可一味地照搬,要灵活运用。另外,不要苛求建立完美的数据模型,应当追求简单、方便、易用。换句话说,建模没有对错之分,合适就好。

公众号【大数据技术与数仓】首发,关注领取资料

上一篇下一篇

猜你喜欢

热点阅读