dim什么意思(线代dim什么意思)

编辑导语:数据仓库是我们用来保存大量历史数据的重要工具。那么,仓库的数量为什么要分层呢?怎么分层?本文从仓库分层的原因、常用模型和实践三个方面详细介绍了仓库分层

编辑导语:数据仓库是我们用来保存大量历史数据的重要工具。那么,仓库的数量为什么要分层呢?怎么分层?本文从仓库分层的原因、常用模型和实践三个方面详细介绍了仓库分层。过来读一下。

浅谈数仓建设中的分层

1.仓库为什么要分层?

仓库分层的原因,即分层的好处体现在以下几个方面:

1.分层就是在空之间变换时间的操作。

我们知道数据仓库一般用来存储大量的历史数据,可能是业务数据,也可能是日志数据。

因为数据的量级,如果数据仓库中查询原始数据需要直接访问的表数和底层文件数很大,反映在我们的日常工作中就是SQL极其复杂,连join和union加在一起都不够用。直接结果就是SQL运行缓慢,甚至无法获得结果或者报错。

分层需要做的是对原始数据进行重新汇总,抽象出不同粒度的不同层次的数据或指标。

分层后,同一指标可能反映在不同层的数据中,看似“重复”,但这种重复是“不完全”的重复,因为各层的指标粒度并不完全一致。

这种不是完全重复的重复,直接的好处就是大大简化了SQL的编写,大大减少了SQL的计算时间。

有人可能会质疑这样会增加仓储成本,但这个成本相对于直接收入来说是可以接受的。毕竟谁也不想被老板一遍遍dis:我要的数字怎么还没出来?

2.分层有利于减少重复开发。

将最常用、最通用的数据模型和指标进行分层抽象汇总,经过这样的处理,生成能够满足大多数业务场景需求的数据表和指标。

这些表格和指示器类似于程序开发中的通用模块和界面。下游用户在使用时不需要从头开发,可以直接使用。

这样既减少了重复开发,又统一了数据和指标。

3.分层可以简化复杂的问题。

比如,大部分分析师刚到一家新公司时,往往被迫接手一个甚至几个祖传的SQL代码,代码数千行。其中的join和uoion太多,一层一层嵌套的子查询不断被切割和混淆。

在这样的情况下,不知道的小白会觉得这位前辈很牛逼,能写出这么长的SQL,甚至暗自觉得自己很幸运,学会了这么牛逼的SQL。

但实际情况往往不合理或者一开始就没有仓库盘点。所有的逻辑都要从最低的表开始计算,所以这个时候如果不复杂就很难了。

仓库分层要做的一部分工作就是对这个又臭又长的SQL进行反汇编和预处理。一方面是对上面提到的通用数据和指标进行分类和预计算,另一方面是对仓库盘点ETL中的JOIN和UNION这些复杂操作进行拆解和解放。

这就是所谓的复杂问题的简单化。

4.分层带来更高的数据安全性。

数据分层后,每一层的表宽和粒度都不一样,这样就可以针对不同的对象打开不同级别的数据。

不需要关心详细数据的另一方可以直接开放高聚合的数据,避免底层详细敏感数据的泄露。

此外,还可以在分层处理时对一些敏感字段进行删除、脱敏和加密,避免安全控制不够细化导致的数据使用权限大于申请权限。

分层的其他好处还包括数据更规范更有条理,数据血缘关系更清晰,数据表和指标统一等等。

二、常用的仓库分层模型

我们以阿里的数据仓库架构图为例,来说明数据仓库常用的层次模型。

浅谈数仓建设中的分层阿里的整体数据分为五层,分别是ODS、DWD、DIM、DWS和ADS。下面分别介绍一下。

ODS(运营数据存储)层,中文通常有两个名字,即贴源数据层和运营数据层。

前者是基于与数据源的关系,也就是说这一层的数据与数据源的数据一致,所以称为粘贴源数据层。

后者是基于数据生成的层面,也就是说,这个层面的数据是由公司的一系列业务动作形成的,所以称为运营数据层。

我们可以看到,无论名字是什么,都体现了与源数据的一致性。

因此,这一层的数据一般与业务数据库中的数据一致,也就是说,这一层的数据来自业务mysql、oracle等数据库或日志,在同步的过程中不对数据做任何处理,以保证与源数据的一致性。

这一层是最基本也是最重要的一层,就像建筑物的地基一样。基础不牢,楼层越高越不稳。

DWD(Data Warehouse Detail),中文称为明细数据层。

该层在保持与原表相同粒度的基础上,按照业务流程从ODS数据中去除脏数据,按照业务流程对表进行分类和关联,通过ETL获得业务流程对应的事实表。

通常在实际业务中,会根据维度建模将一些常用的维度冗余添加到本级表中,以降低数据查询的成本。

需要特别提醒的是,这一层的数据在粒度上还是明细数据,没有聚合,只是表格变宽了。

DIM(维度),中文称为维度数据层。

这一层其实是和DWD平行的一个层次,是对业务中常见维度的建模和抽象,比如常见的地理维度、日期维度、商品类别SKU等维度。所谓维度,就是我们看待和分析数据的一种习惯和视角。

这一层通常存储完整的维度键和维度名,而事实表通常存储维度键的字段。

DWS(Data Warehouse Service,数据仓库服务),直译为数据服务层,通常被称为汇总数据层。

这一层的数据来源基本上是DWD和DIM。通常,DWD中的事实表的键与DIM中的维度的键相关联,然后根据更高的维度对事实进行汇总和聚合,以获得某个维度或多个维度中的汇总数据或指标。

需要提醒的是,这一层数据的粒度发生了变化,不再是明细数据,而是汇总数据,这也是这一层被称为汇总数据层的原因。

ADS(Application Data Service),直译应用数据服务层,就是我们通常所说的应用层或者索引层。

这一层的数据源可以是DWD层、DWS层或两者的混合计算。

这一层数据也是聚合数据。

那么它和DWS层有什么区别呢?

DW通常是明细数据较低维度按照常用维度的聚合汇总,而ADS层通常是针对具体应用(报表、接口等)的数据指标较高维度的聚合汇总。).

举个不是特别恰当但很能说明问题的栗子。DWD的十条数据在DWS可能聚合成五条,但在ADS中可能聚合成一条,所以它们之间的聚合程度是不一致的。

但两者之间可能有相同程度的聚合,但此时ADS层的表中或多或少都有字段,这也体现了其面向应用的意义。

以上是阿里数据仓库的主要层。抛开具体的层名不谈,一般来说,数据仓库可以分为三大层,即原始数据层,它是数据仓库中数据的来源。

清洗层,即对原始数据进行各种操作形成的数据。

面向应用,也就是说,针对单个特定的数据需求进行清洗而形成的数据。

知道了这个意思,其他的写法和名字如DWM,FACT,DW,DM等就不用解释了。这些只是表象,核心才是上面说的三层的本质。

3.你的仓库应该如何分层?

很多同学看了上面的分层介绍可能觉得分层不是那么回事。

不过说到实际场景,ODS里就不好说了,后面有几层。如何定义各层的原理和依赖关系?

将特定的表格放在广告层或DWS层合适吗?

先说一下你的仓库怎么分层。

首先,我们要记住一个原则:

不要为了分层而分层。盲目的分层不仅会造成几个仓库的表混乱,造成资源的极大浪费,也是给数据管理留下的无限隐患。

分层的目的是让数据更加标准、清晰、易用,而不是要有更多的层。

有两点要记住,越到上层,数据的粒度越粗,表达的内容越有限,所以层次越多越好。

一般本层的表只允许依赖下一层,严格避免同层依赖,否则容易产生循环依赖。

知道了以上原则和要点,我的建议是,如果业务场景简单,数据表不多,三层就够了。

如果业务场景和流程比较复杂,指标维度需要计算很多表关联,建议四层以上。

不要为了分层而分层,也不要被这一层所困。

一千个读者可能有一千个分层的想法,一千个公司也可能有一千个分层的方法。适合自己的才是最好的。

作者:数据仓库@唐刚,“数据人创客联盟”成员。

本文由@一个数据人的私人情节原创发布。每个人都是产品经理。未经许可,禁止复制。

标题来自Pexels,基于CC0协议。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/18083.html

发表回复

登录后才能评论