4

数据仓库(7)数仓规范设计 - 张飞的猪

 2 years ago
source link: https://www.cnblogs.com/the-pig-of-zf/p/16169287.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

数据仓库(7)数仓规范设计

规范设计在这里取《大数据之路:阿里巴巴大数据实践》中的定义,这里记录一下本人对这一块自己的理解。

规范定义指以维度建模作为理论基础 构建总线矩阵,划分和定义数据域、业务过程、维度、度量 原子指标、修饰类型、修饰词、时间
周期、派生指标。

所谓的规范的定义,简单理解,如果把数据当作货物,那就是货物的分类,以及对应相关的属性,比如生产日期,某个原料的含量等,我们可以把相近或者相同货物,按照一定的规律,放在一起,方便入库与出库,需要某个货物按照这些规律就可以,以比较快的速度拉取出来。

一般的规范设计包含一下几个方面:划分和定义数据域、业务过程、维度、度量 原子指标、修饰类型、修饰词、时间周期、派生指标。

数据域:指面向业务分析,将业务过程或者维度进行抽象的集合。其中,业务过程可以概括为一个个不可拆分的行为事件,如买家下单事件,买家是维度。数据域需要抽象提炼,并且长期维护和更新,不可轻易变动。划分数据域时,既要能涵盖当前所有的业务需求,又能在新业务进入时无影响地被包含进已有的数据域和扩展新的数据域。
业务过程:指企业的业务活动,如下单、支付等,业务过程是一个不可拆分的行为事件。
时间周期:用来明确数据统计的时间范围或者时间点,如最近30天、自然周、截至当日等。
修饰类型:是对修饰词的一种抽象划分。修饰类型从属于某个业务域,如日志域的访问终端类型涵盖无线端、PC端等修饰词。
度量/原子指标:原子指标和度量含义相同,基于某一个业务事件行为下的度量,是业务定义中不可再拆分的指标,具有明确业务含义的名词,如支付金额。
维度:维度是度量的环境,用来反映业务的一类属性,这类属性的集合构成一个维度,也可以称为实体对象。维度属于一个数据域,如地理维度、时间维度。
维度属性:维度属性隶属于一个维度,如地理维度里面的国家名称、国家ID、省份名称等属于维度属性。
派生指标:派生指标=一个原子指标+多个修饰词(可选)+时间周期。可以理解为对原子指标统计范围的圈定。如原子指标:支付金额,最近1天海外买家支付金额则为派生指标(最近1天为时间周期,海外为修饰词,买家作为维度,而不作为修饰词)。

这里说说对上面的理解,上面的定义,实际上就是对数据的分类,以及对指标统一口径,统一命名的过程。首先,我们需要划分数据域,这个是业务过程的集合,所以这个是对数据的一个大的分类,这个很重要,因为会影响到后续我们的数据怎么开发和存储,以及我们后续需要数据时,怎么查询,从哪里查询。

数仓规范设计

数据域是一个业务过程+维度的集合,也就是我们在建立规范定义的时候,需要先定义目前以及未来将有的业务过程,这个需要和业务一起定义讨论,因为这一块要贴近业务,一般的开发人员不够业务人员对业务理解深入。确定好业务过程之后,再看看目前的业务过程有哪些维度,抽取出来,做好维度总线矩阵,维护好一致性维度。一个业务过程属于一个数据域,但是一个维度可以属于多个数据域。

定义好业务过程和维度之后,就要对业务过程和维度分类了,看看每一个数据域都有哪些内容,做好划分。

分类好了之后,就是确定,每一个业务过程,有哪些原子指标,以及对应的修饰词,时间周期。

做好之后,再根据需求生成我们想要的派生指标等,或者抽取一些数据宽表,用于数据分析,这样我们就可以想要知道某个数据,就可以通过数据域->业务过程->相应的物理表->对应的指标,修饰词,时间周期等,通过这个分类,定位到我们的数据,这样也可以方便我们后续对数据地图,数据资产的管理,这个就有点像是图书馆对图书的分类,想定义大类,再细分,图书是根据类目划分,我们这里要根据业务行为过程,具体的业务划分。

图书馆分类

上面的图是网络上某一个图书馆的图书分类,我们可以注意到,每一个图书分类前面都有一个字母,这个是每一个类目的代码,用于图书的编码记录,这里我们也是一样,需要对每一个数据域,也就是数据的分类,分配一个编码。这样用于表命名,最简单的就是作为前后缀,这样我们就可以简单的通过表名知道这个表是数据哪个数据域的,同样的道理我们需要对上面提到的业务过程,维度,修饰词等取一个统一的编码,用于对后续数据开发过程中,表命名,字段命名等,这样我们通过表名称,字段名称,就可以大概知道这张表是什么数据。

这里举一个简单电商的例子,比如交易数据域(transaction),业务过程属于下单(order),支付金额(pay_amount),时间周期为最近1天(1d),按照上面的逻辑就是表和字段的逻辑表示为transaction_order.pay_amount_1d,这里为一个伪代码,帮助了解,具体以共同的约定为准。

原文链接:https://zhuanlan.zhihu.com/p/457903802


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK