数据仓库!!!数据仓库建设与框架,看看是不是给讲明白了

597 阅读16分钟

数据仓库,这个几乎是所有大数据开发面试必问的话题。比如数据仓库的分层架构?为什么需要数据仓库建模?数据仓库建模的原则是什么?结合业务举例说明数据仓库建模的步骤,以及注意事项?什么是缓慢变化维?维度该如何选择建设,原则是什么,主键如何设计等等?

一众问题搞得小伙伴们死去活来,甚至工作好几年的小伙伴都没搞清楚过,尤其是大厂特别爱问这些问题。有些小伙伴甚至觉得这些都是形而上学,不懂这些我不一样搞了很多年开发?即使感兴趣的买了一本厚厚的数据仓库工具书也看不懂!那么实际数据仓库建模到底是什么,开发人员该掌握哪些?

记住:技术是服务于业务,发展于业务的。大数据的本质就解决两个问题:海量数据的存储和海量数据的计算。大数据之所以有很多技术框架的发展,迭代,就是为了满足不同的新的业务需求。故技术选型要结合业务,业务的发展也是技术的发展。

1.什么是数据仓库,其前世今生?

       来一起看个官方定义:数据仓库,英文名称为DataWarehouse,可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它出于分析性报告和决策支持目的而创建。为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。

       数据仓库之父 Bill Inmon 在 1991 年出版的 Building the Data Warehouse 一书中首次提出了被广为认可的数据仓库定义。 Inmon 将数据仓库描述为一个面向主题的、集成的、随时间变化的、非易失的数据集合,用于支持管理者的决策过程。

    简单点来说,现实情况是一个企业有很多数据源,比如有的业务数据存放在Mysql,PG库,有的存放在Oracle,有的日志存放在Ftp,Nginx服务器上等,有的是外部采集的爬虫数据等等。那么对于企业来说沉淀了这么多数据,如何将这些数据放到一起进行数据融合,数据分析,给企业挖掘数据价值呢?这些不同数据源,不同数据存储格式,不同的数据更新周期,如果让你把企业这些数据融合分析,你怎么办?

****首先,你是不是要把这些不同数据按照统一的格式,一定的规范存储到一起,然后在通过特定的工具做数据计算分析?那么对于企业来说,把企业各种数据源的数据放到一起存储和计算的地方就叫数据仓库(约定俗称的叫法),所以本质上数据仓库上融合各个数据源,存储加工数据的地方,早期大数据没有发展起来的时候,企业数据仓库的载体一般是Oracle,那时候主要给企业做BI报表(Business Intelligence商业智能)。

后来随着企业数字化,互联网的发展,企业收集到数据越来越多,发现原有的技术框架已经满足不了业务存储和分析的需求了。于是乎就有了现在Hadoop生态为主的数仓仓库。

2 .数据仓库发展历程与内容

1.数据仓库的发展大致经历了这样的三个过程:

  1. 简单报表阶段:这个阶段,系统的主要目标是解决一些日常的工作中业务人员需要的报表,以及生成一些简单的能够帮助领导进行决策所需要的汇总数据。这个阶段的大部分表现形式为数据库和前端报表工具。
  2. 数据集市阶段:这个阶段,主要是根据某个业务部门的需要,进行一定的数据的采集,整理,按照业务人员的需要,进行多维报表的展现,能够提供对特定业务指导的数据,并且能够提供特定的领导决策数据。
  3. 数据仓库阶段:这个阶段,主要是按照一定的数据模型,对整个企业的数据进行采集,整理,并且能够按照各个业务部门的需要,提供跨部门的,完全一致的业务报表数据,能够通过数据仓库生成对对业务具有指导性的数据,同时,为领导决策提供全面的数据支持。

       通过数据仓库建设的发展阶段,我们能够看出,数据仓库的建设和数据集市的建设的重要区别就在于数据模型的支持。因此,数据模型的建设,对于我们数据仓库的建设,有着决定性的意义。

2.数据仓库组成

  • 多种多样的数据源
  • 数据抽取、转换、导入(ETL)
  • 操作型的数据和分析型的数据
  • 主题模型
  • 数据集市
  • 报表、查询、EIS工具(主管信息系统---服务于组织的高层经理的一类特殊的信息系统能够迅速、方便、直观(用图形)地提供综合信息)
  • OLAP工具
  • 数据挖掘工具
  • 元数据
  • 数据质量管理
  • 数据标准化
  • 信息发布

 3.数据仓库的特点和建设的原则

         数仓仓库的既然本质是给企业存储计算各种数据源数据融合分析的。首先如果企业数据规模小,数据源单一,则无所谓,数仓仓库怎么搞都行。但是如果企业数据源及其多而复杂,数据体量及其庞大,如PB规模的数据,同时数据仓库的使用人员成千上万,那么如何管理这些海量的数据,如何设计数据的存储,如何管理这些人员的使用等等,都是一个难题。

        就像一个小公司一样,几十人,上百人时可以通过人情事故管理,灵活高效氛围好。但是一个几万人,几十万人的公司再去靠人情管理就不太现实了,这个时候怎么办?就要靠规章制度去约束规范大家,靠KPI考核大家了。同样,数据仓库的管理也是这样,海量数据存储计算的数据仓库建设,也有一些原则和规范给大家参考。

1.数据仓库的数据是面向主题的

           什么是主题呢?首先,主题是一个抽象的概念,是较高层次上企业信息系统中的数据综合、归类并进行分析利用的抽象。在逻辑意义上,它是对应企业中某一宏观分析领域所涉及的分析对象。面向主题的数据组织方式,就是在较高层次上对分析对象的数据的一个完整、一致的描述,能完整、统一地刻划各个分析对象所涉及的企业的各项数据,以及数据之间的联系。所谓较高层次是相对面向应用的数据组织方式而言的,是指按照主题进行数据组织的方式具有更高的数据抽象级别。

         说人话,就是企业数据仓库中数据是分主题域的,比如以电商上行业为例,数据仓库建设的主题分为:会员信息主题域(会员信息相关所有数据),订单主题域,商家主题域,商品主题域等等。这些牵涉到数据建模的选型,为啥要这样建设成主题,这是很多企业历年经验总结的,具体好处原因后面数仓建模模块时详细分析。

2.数据仓库的数据是集成的

****数据仓库的数据是从原有的分散的数据库数据抽取来的。操作型数据与DSS分析型数据之间差别甚大。

        第一,数据仓库的每一个主题所对应的源数据在原有的各分散数据库中有许多重复和不一致的地方,且来源于不同的联机系统的数据都和不同的应用逻辑捆绑在一起;

       第二,数据仓库中的综合数据不能从原有的数据库系统直接得到。因此在数据进入数据仓库之前,必然要经过统一与综合,这一步是数据仓库建设中最关键、最复杂的一步,所要完成的工作有:(1)要统一源数据中所有矛盾之处,如字段的同名异义、异名同义、单位不统一、字长不一致,等等。 (2)进行数据综合和计算。数据仓库中的数据综合工作可以在从原有数据库抽取数据时生成,但许多是在数据仓库内部生成的,即进入数据仓库以后进行综合生成的。

        简单点来说:就是数据仓库中数据是很多数据源数据融合后加工的,跟原来业务系统的数据差别会很大,比如数据根据各中国源数据汇总统计的,或者通过特定算法ETL加工处理后得来的。所以叫集成的。

如下,公司各个保险业务库的数据,在数仓里,集成为一个保险主体的数据,既有明细数据也有各种汇总,统计,挖掘数据。

 3. 数据仓库的数据是不可更新的(相对稳定的)

        数据仓库的数据主要供企业决策分析之用,所涉及的数据操作主要是数据查询,一般情况下并不进行修改操作。

         数据仓库的数据反映的是一段相当长的时间内历史数据的内容,是不同时点的数据库快照的集合,以及基于这些快照进行统计、综合和重组的导出数据,而不是联机处理的数据。数据库中进行联机处理的数据经过集成输入到数据仓库中,一旦数据仓库存放的数据已经超过数据仓库的数据存储期限,这些数据将从当前的数据仓库中删去。因为数据仓库只进行数据查询操作,所以数据仓库管理系统相比数据库管理系统而言要简单得多。

       数据库管理系统中许多技术难点,如完整性保护、并发控制等等,在数据仓库的管理中几乎可以省去。但是由于数据仓库的查询数据量往往很大,所以就对数据查询提出了更高的要求,它要求采用各种复杂的索引技术;同时由于数据仓库面向的是商业企业的高层管理者,他们会对数据查询的界面友好性和数据表示提出更高的要求。

    简单总结一下就是:数据仓库中保存的数据是一系列企业数据的历史快照,不建议被修改(实际分析会有数据回补的情况)。用户只能通过分析工具进行查询和分析。

4.数据仓库的数据是随时间不断变化的(时变性)

**** 数据仓库中的数据不可更新是针对应用来说的,也就是说,数据仓库的用户进行分析处理时是不进行数据更新操作的。但并不是说,在从数据集成输入数据仓库开始到最终被删除的整个数据生存周期中,所有的数据仓库数据都是永远不变的。
数据仓库的数据是随时间的变化而不断变化的,这是数据仓库数据的第四个特征。这一特征表现在以下3方面:
(1)数据仓库随时间变化不断增加新的数据内容。数据仓库系统必须不断捕捉OLTP数据库中变化的数据,追加到数据仓库中去,也就是要不断地生成OLTP数据库的快照,经统一集成后增加到数据仓库中去;但对于确实不再变化的数据库快照,如果捕捉到新的变化数据,则只生成一个新的数据库快照增加进去,而不会对原有的数据库快照进行修改。
(2)数据仓库随时间变化不断删去旧的数据内容。数据仓库的数据也有存储期限,一旦超过了这一期限,过期数据就要被删除。只是数据仓库内的数据时限要远远长于操作型环境中的数据时限。在操作型环境中一般只保存有60~90天的数据,而在数据仓库中则需要保存较长时限的数据(如5~10年),以适应DSS进行趋势分析的要求。
(3)数据仓库中包含有大量的综合数据,这些综合数据中很多跟时间有关,如数据经常按照时间段进行综合,或隔一定的时间片进行抽样等等。这些数据要随着时间的变化不断地进行重新综合。因此,数据仓库的数据特征都包含时间项,以标明数据的历史时期。

4.数据仓库的分层架构原因与分层原则

1.数据仓库要不要分层?

        数据仓库既然是数据存储计算的地方,那么为什么需要分层呢?同样也是数据规模,业务场景决定可以说很多公司数据仓库建设刚起步时,大部分的数据都是经过粗暴的数据接入,进行ETL后就直接对接业务,生成报表或者导入业务系统直接使用。

后来随着公司业务的发展,数据的沉淀,数据仓库发展到一定阶段,发现数据的使用杂乱无章,各种业务都是从原始数据直接计算而得。 造成各种重复计算(可能两张表只差了几个字段,但每个人都跑了一次),严重浪费了计算资源和存储资源,企业负担成本极大。这个时候大家就要想着如何规范化存储和计算了,如何最大化降低企业成本。尤其数据规模越大的公司,需求越强烈。

当然你公司数据规模小,非不分层可不可以,当然可以。也没必要搞那么规范,规范的不好之处就是要付出很大的人力成本去实施规范,监督规范的实施。最终的选择要结合你们企业的成本去考量,一切都要结合实际。

2.数仓分层的好处有哪些?

历史血的教训,各大厂总结了下数仓分层的好处:

  1. 清晰数据结构:每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解。
  2. 数据血缘追踪:简单来讲可以这样理解,我们最终给业务诚信的是一能直接使用的张业务表,但是它的来源有很多,如果有一张来源表出问题了,我们希望能够快速准确地定位到问题,并清楚它的危害范围。
  3. 减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。
  4. 把复杂问题简单化。讲一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。
  5. 屏蔽原始数据的异常。不必改一次业务就需要重新接入数据,或者业务改了数据,也不一定对现在有影响
  6. 屏蔽业务的影响,不必改一次业务就需要重新接入数据。

3.数据仓库该如何分层及如何设计分层?

  数仓的分层好处有那么多?那么该如何分层?一切其实还是结合企业的实际情况,业务场景,数据规模,可以粗放型,也可以丰富更多的细节。

具体数仓的分层设计,如何结合业务对企业数据仓库分层?主流大厂的数仓分层架构情况,设计原则等,分层如何命名?这些内容太多了,后面详细一章节结合案例分析。也可以先参考:数据仓库的四个层次设计

5.数据仓库建模的选型与建模原则

      前面聊过数据仓库发展到规范化建设需要分层架构。那么每一层的数据建模的原则应该是什么样的呢?以及为什么需要数据建模?数据建模有哪些选型?

1.为什么需要数据建模?

   2.数据建模有哪些方法?这些模型的特点是什么?

3.数据建模的原则是什么?

4.企业数仓建设如何选择建模,各种模型的对比?

6.数据仓库维度建模的实施与注意事项

1.维度建模有哪些步骤及其作用?

2.结合企业案例演示完整维度建模使用?

3.维度建模的注意事项?

7.数仓的数据治理与安全

1.数仓的数据治理的必要性?

2.从哪些维度数据治理?

3.数据治理与管理体系建设?

总结:前面7个章节涵盖了数仓的前世今生,发展迭代,以及当前在企业中的应用,简单介绍了整个数仓体系与框架。学习的过程要先见森林,再见树木,最后再见森林的过程。本系列我将系统化为您讲解数仓建设的全貌与细节。每周持续更新其他模块,欢迎大家关注交流。