数据集市(DM)
这里我们先回忆一下数据仓库的定义, 数据仓库(Data Warehouse) 是一个面向主题的(Subject Oriented) 、集成的( Integrate ) 、相对稳定的(Non -Volatile ) 、反映历史变化( Time Variant) 的数据集合用于支持管理决策。更多关于数据仓库的可以参考数仓架构发展史,而且前面我们也介绍了大量关于数仓建模这一块的内容,具体可以参考我们的专栏数仓建模方法论。
今天我们介绍一个在数仓中非常常见的概念——数据集市,数仓定义中的五个特性都值得一一仔细品味,随着你对数仓的理解加深,你对这个五个特性的理解也会更加全面。
首先数据仓库用于支持决策,面向分析型数据处理,它不同于企业现有的操作型数据库;其次,数据仓库是对多个异构的数据源有效集成,集成后按照主题进行了重组,并包含历史数据并且存放在数据仓库中的数据一般不再修改。
什么是数据集市(DM)
这里有一个词是主题,那就是我们集成后的数据,又按照了主题进行了划分,而面向主题划分出来的部分就是数据集市,也就是说数据集市是数据仓库的一个子集或者说是集成后的子集。
数据集市通常是面向部门的或者是部门级业务,或者是面向部门的主题的,举个例子例如在金融领域可能会有结算部门的数据集市、风控部部门数据集市、市场部门的数据集市、运营部门的数据集市,这里的特点就是面向部门的,但是对于有的部门它的组织结构可能比较大,所以它所负责的业务线也有多个,这个时候就会出现,数据集市是面向部门的子业务,总之一句话,数据集市是面向主题的,一般公司的主题就是部门或者业务线。
这里还有一点要强调数据集市是作为我们数仓的一层,对外提供数据服务,当然提供服务的方式是有很多种的,但是最终我们是将数据集市层的数据提供出去的,也就是说这一层是面向用户的。
为什么要有数据集市
上面了解了什么是数据集市,接下来我们就看看一下为什么要有数据集市,开始之前我们线回顾一下前面的数仓建模分层理论,我们知道了数仓最简单的就是ODS+DM,但为什么我们还要分层,在文章中我们解释了分层的意义是什么,如果你忘记了可以看一下前面的文章。
这里我们知道了数据集市是数据仓库的子集,我们可以把分层看作是横向切分,那么数据集市就是竖向切分,
所以我们可以得出一个结论那就是数据集市的划分也是为了更好的管理数仓和提高生产效率,但是这个还是有点抽象,下面我们再讨论一下为什么要做数据集市层。
灵活性
这里我们把数据集成也引入进来,从宏观上看一下从数据源到数据服务,整个数仓的存在形式是怎样的,当然这里我们是一个简化的图,我们主要反映出问题就行了。
上面就是我们当前的数仓形态,这下我们解释一下我们为什么要做数据集市层,数据集市层虽然是一个层,但是这层里有多个集市,每个集市面向不同的业务线或者是业务部门,那我们为什么要这么做呢,说白了就是为解耦,解耦的目的是为了增加灵活性。
如果没有数据集市层,那么我们的数仓就要面向众多的业务部门,但是由于每个业务部门的数据需求或者所关心的数据是不一样的,这就会导致我们的数仓建设失去核心,就会出现我们为了满足某一个部门而违背了我们数仓的建设原则的现象出现,所以我们增加了数据集市层,也就是每个部门的个性化需求在这里体现。
其实如果你学习过设计模式或者是Java 的话,其实很容易立即,这有点类似抽象类Service 和 实现类 ServiceImpl.
数据集市有什么特点
如果你仔细学习了前面的内容的话,你肯定可以理解下面的几个特点这里我就不一一解释,而且这些特点也是我总结出来的,你也可有对其进行扩展。
规模小
数据仓库是面向企业的,数据集市是面向部门或者特定业务的
面向主题
数据集市是面向部门或者特定业务的
直接面向用户
数据集市是面向部门或者特定业务的
个性化高
数据集市是面向部门或者特定业务的,所以就会出现灵活多变的特点,而且也会出现流程上更简单快速,规范上要求不严格,使用上要尽量简单。其实这会反映到我们的表上
- 就是我们集市层的表一般都是关联好之后的表,使用的时候基本不需要关联,主要是为了使用方便性能高,其实可以看到我们集市层的表机会都是数仓建模—宽表的设计
- 还有就是我们集市层的表一般都是冗余了一些相关的字段,主要是为了应对也无妨多变的请求,举个例子业务方想看每个人今年的总消费,我可能会把最大值和平均值都会计算出来。
满足需求为第一优先级
尤其在一起初创企业,数仓建设跟不上的时候,为了尽快完成需求我们就会直接从ods层建设DM,从而可以对外提供数据。
如何建立数据集市
数据仓库(集市)的设计可以采用迭代式的方法,也就是说我们可以根据我们的适用方不断的去迭代我们的数据集市,而且也没有任何数据集市是可以一次性建成的。
理论上讲,应该有一个总的数据仓库的概念,然后才有数据集市,但是我们实际的做法是先确定了数据集市以及我们的服务对象之后,然后才开始开始建立数据仓库最后才是数据集市,也就是我们首先设计的是数据集市,但是我们建立的时候却是首先建立的是数据仓库。
总结
数据集市就是数据仓库面向某个主题的子集,它作为数仓面向用户的一层存在,提供数据服务。
据集市往往作为数据仓库之上的一个面向分析应用或者是数仓里面向用户的一层,也就是说没有这一层的话,我们的仓库就要面向用户了,我们可以将其视作代理,因为这一层要面向用户,所以它就有多变和不规范的特性,但是为了保证数仓整体建设的合理性和规范性,所以我们在数仓上加了这一层。
虽然集市层是面向用户的,但是由于面向的用户群体不同,所以又根据用户群体的特点,将集市层进行了纵向切分,切分成了一个个不同的集市。
数据仓库是面向企业的,数据集市是面向部门或者特定业务的,你可以将其看作一个小型的数据仓库,其实这里牵扯出了早期数据仓库的一种存在形体,那就是每个部门有自己的数据仓库,而不是统一建设的数据仓库。