大数据数仓设计过程

本文详细论述在大数据环境下的数据仓库设计理论,然后通过燃气行业一个小案例描述数仓的架构设计、ETL过程、模型设计方法和物理实施过程。欢迎订阅!

数据仓库概念

数据仓库是面向主题的、集成的、不可更新的(稳定性)、随时间不断变化(不同时间)的数据集合,用以支持经营管理中的决策制定过程。在数据仓库里,每个数据单元都和特定的时间相关。数据仓库包括原子级别的数据和轻度汇总的数据。

数据仓库发展阶

数据仓库发展大致以Google发表“三驾马车”【GFS(解决大数据存储问题)、MapReduce(解决大数据计算问题)、BigTable(解决大数据查询问题)】论文从而出现对标产品Hadoop、Hive、HBase为分水岭。在这之前,数据仓库基于单机的关系型数据库构建,数据处理面向OLTP数据,计算能力较弱。此时的数据仓库处于数据库时代,主要解决的问题是数据仓库的灵活性和性能之间的问题,这个时代又细分为几个阶段:

大数据数仓设计过程

阶段1:错综复杂的决策支持系统没有统一的数据源容易导致重复建设、数据不一致问题;

阶段2:规范化和集中式的数据仓库存储系统无法解决灵活的查询和分析需求,同时无法应对海量信息的性能要求;

阶段3:引入了数据集市的数据仓库体系结构解决了数据仓库的灵活性和性能之间的矛盾,数据集市存储为特定用户需求而预先计算好的数据,从而满足用户对性能的需求。

在这之后进入大数据时代,数据处理除了OLTP结构化数据之外,还有更多的非结构(如文件、图片等)、半结构化(如json、xml等格式)数据,数据处理能力也大大增强。此时的数据仓库实际上已经进入数据湖时代,此时数仓基于数据库时代较成熟的理论和实践(分层建模),主要解决的问题是集群的架构和部署问题,根据集群架构不同又分为几个阶段:

大数据数仓设计过程

1. 阶段一:自建开源Hadoop数据湖架构,原始数据统一存放在HDFS系统上,引擎以Hadoop和Spark开源生态为主,存储和计算一体。缺点是需要企业自己运维和管理整套集群,成本高且集群稳定性差。

2. 阶段二:云上托管Hadoop数据湖架构(即EMR开源数据湖),底层物理服务器和开源软件版本由云厂商提供和管理,数据仍统一存放在HDFS系统上,引擎以Hadoop和Spark开源生态为主。这个架构通过云上 IaaS 层提升了机器层面的弹性和稳定性,使企业的整体运维成本有所下降,但企业仍然需要对HDFS系统以及服务运行状态进行管理和治理,即应用层的运维工作。同时因为存储和计算耦合在一起,稳定性不是最优,两种资源无法独立扩展,使用成本也不是最优。

3. 阶段三:云上数据湖架构,即云上纯托管的存储系统(如对象存储系统S3,OSS)逐步取代HDFS,成为数据湖的存储基础设施,并且引擎丰富度也不断扩展。除了Hadoop和Spark的生态引擎之外,各云厂商还发展出面向数据湖的引擎产品。如分析类的数据湖引擎有AWS Athena和华为DLI,AI类的有AWS Sagemaker。这个架构仍然保持了一个存储和多个引擎的特性,所以统一元数据服务至关重要,如AWS推出了Glue,阿里云EMR近期也即将发布数据湖统一元数据服务。此时存储和计算已经分离。

何为数据湖

数据湖是一个集中式存储库,允许您以任意规模存储所有结构化和非结构化数据。您可以按原样存储数据(无需先对数据进行结构化处理),并运行不同类型的分析 – 从控制面板和可视化到大数据处理、实时分析和机器学习,以指导做出更好的决策。

关于数据湖的定义其实很多,但是基本上都围绕着以下几个特性展开。

1、 数据湖需要提供足够用的数据存储能力,这个存储保存了一个企业/组织中的所有数据。
2、 数据湖可以存储海量的任意类型的数据,包括结构化、半结构化和非结构化数据。
3、 数据湖中的数据是原始数据,是业务数据的完整副本。数据湖中的数据保持了他们在业务系统中原来的样子。
4、 数据湖需要具备完善的数据管理能力(完善的元数据),可以管理各类数据相关的要素,包括数据源、数据格式、连接信息、数据schema、权限管理等。
5、 数据湖需要具备多样化的分析能力,包括但不限于批处理、流式计算、交互式分析以及机器学习;同时,还需要提供一定的任务调度和管理能力。
6、 数据湖需要具备完善的数据生命周期管理能力。不光需要存储原始数据,还需要能够保存各类分析处理的中间结果,并完整的记录数据的分析处理过程,能帮助用户完整详细追溯任意一条数据的产生过程。
7、 数据湖需要具备完善的数据获取和数据发布能力。数据湖需要能支撑各种各样的数据源,并能从相关的数据源中获取全量/增量数据;然后规范存储。数据湖能将数据分析处理的结果推送到合适的存储引擎中,满足不同的应用访问需求。
8、 对于大数据的支持,包括超大规模存储以及可扩展的大规模数据处理能力。

综上,个人认为数据湖应该是一种不断演进中、可扩展的大数据存储、处理、分析的基础设施;以数据为导向,实现任意来源、任意速度、任意规模、任意类型数据的全量获取、全量存储、多模式处理与全生命周期管理;并通过与各类外部异构数据源的交互集成,支持各类企业级应用。

大数据数仓设计过程


数据仓库与数据湖区别

大数据数仓设计过程

数据仓库架构

数据湖和数据仓库,就是原始数据和数仓模型的区别,但现代大数据数据仓库设计依然会遵循相同的建模原则和逻辑架构设计,下图展示了一个数据仓库的逻辑架构。

大数据数仓设计过程

数据仓库设计一般需要以下几个步骤:

1、分析业务需求,确定数据仓库主题;

2、构建逻辑模型;

3、数据仓库技术选型;

4、逻辑模型转换为物理模型;

5、数据源接入;

6、数据存储清洗和转换;

7、开发数据仓库的分析应用;

8、数据仓库管理和维护

其中最重要的是分主题的数据模型设计,这个已经有成熟的理论和实践,接下来主要介绍数据仓库建模设计相关理论和实践。

数据仓库建模

数据模型就是数据组织和存储方法,它强调从业务、数据存取和使用角度合理存储数据。在数据仓库中,数据模型犹如在图书馆中分门别类地摆放书籍,数据模型只有将数据有序的组织和存储起来之后,大数据才能得到高性能、低成本、高效率、高质量的使用。

大数据数仓设计过程

这里主要介绍两种建模理论:ER模型和维度模型。

ER模型

数据仓库之父Bill lnmon提出的实体关系( Entity Relationship,ER ) ER模型从全企业的高度描述企业业务,在范式理论上符合3NF 。

特点:

①需要全面了解企业业务和数据

②实施周期非常长

③对建模人员的能力要求非常高

④按主题划分并进行一致性处理,服务但不能直接用于分析决策

建模步骤:

l高层模型:一个高度抽象的模型,描述主要的主题以及主题间的关系,用于描述企业的业务总体概况。

l中层模型:在高层模型的基础上,细化主题的数据项。

l物理模型(也叫底层模型):在中层模型的基础上,考虑物理存储,同时基于性能和平台特点进行物理属性的设计,也可能做一些表的合并、分区的设计等。

比如这样一个ER模型例子:

大数据数仓设计过程

图示中每一张矩形图是一个实体,实体之间独立性强,高度抽象,需要通过外键或者关系表进行关联,整张图靠实体和关系构建 起来。

维度模型

Ralph Kimball 大师所倡导的维度模型从分析决策的需求出发,为分析需求服务,因此它重点关注用户如何更快速地完成需求分析,同时具有较好的大规模复杂查询的响应性能。主要概念:

大数据数仓设计过程

其建模步骤为:

1. 选取业务过程

l业务过程是通常表示的是业务执行的活动,与之相关的维度描述和每个业务过程事件关联的描述性环境。

l通常由某个操作型系统支持,例如:订单系统。

l业务过程建立或获取关键性能度量。

l一系列过程产生一系列事实表。

2. 声明粒度

l粒度传递的是与事实表度量有关的细节级别。

l精确定义某个事实表的每一行表示什么。

l对事实表的粒度要达成共识。

3. 选定维度

l健壮的维度集合来粉饰事实表

l维度表示承担每个度量环境中所有可能的单值描述符。

4. 确定事实

l不同粒度的事实必须放在不同的事实表中。

l事实表的设计完全依赖物理活动,不受最终报表的影响。

l事实表通过外键关联与之相关的维度。

l查询操作主要是基于事实表开展计算和聚合。

比如这样一个维度模型例子:

大数据数仓设计过程

图示中间的为一张事实表,主键为包含不同的维度 ID 的 联合主键。整体看维度建模的设计类似星型,并且一个中心的事实表对应多个一层的维表,某个维度的描述仅限一张表。模型中独立出来的日期和时间维度带有明显的查询和分析需求目标。

ER模型和维度模型比较

大数据数仓设计过程

模型设计基本原则

大数据数仓设计过程

分层建模

大数据数仓设计过程

分层建模的优势

清晰数据结构:每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解。
数据血缘追踪:能够快速准确地定位到问题,并清楚它的危害范围。
减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。
把复杂问题简单化:将复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。当数据出现问题之后,不用修复所有的数据,只需要从有问题的步骤开始修复。
屏蔽原始数据的异常:不必改一次业务就需要重新接入数据。

数据仓库与数据集市区别

从数据模型上看,数据仓库中数据结构采用的规范化模式(关系数据库设计理论),数据集市的数据结构采用的星型模式(多维数据库设计理论)。

大数据数仓设计过程

下面是详细的比较:

大数据数仓设计过程

数据仓库与数据中台区别

从数据仓库架构图中我们知道数仓最终目标也是给上层应用提供服务,似乎跟数据中台有重叠之处,实际上简化版的数据中台其实就是数据仓库,那如何看待两者的关系呢?在计算机领域,数据仓库(英语:data warehouse,也称为企业数据仓库)是用于报告和数据分析的系统,被认为是商业智能的核心组件。数据仓库是来自一个或多个不同源的集成数据的*存储库。数据仓库将当前和历史数据存储在一起,用于为整个企业的员工创建分析报告。比较学术的解释是,数据仓库由数据仓库之父W.H.Inmon于1990年提出,主要功能乃是将组织透过信息系统之在线交易处理(OLTP)经年累月所累积的大量数据,透过数据仓库理论所特有的数据存储架构,作一有系统的分析整理,以利各种分析方法如在线分析处理(OLAP)、数据挖掘(Data Mining)之进行,并进而支持如决策支持系统(DSS)、主管信息系统(EIS)之创建,帮助决策者能快速有效的自大量数据中,分析出有价值的信息,以利决策拟定及快速回应外在环境变动,帮助建构商业智能(BI)。数据仓库的本质包含如下三部分:

1. 内置的存储系统,数据通过抽象的方式提供(例如采用Table或者View),不暴露文件系统。

2. 数据需要清洗和转化,通常采用ETL/ELT方式

3. 强调建模和数据管理,供商业智能决策

从上述的标准判断,无论传统数据仓库(如Teradata)还是新兴的云数据仓库系统(AWS Redshift、Google BigQuery、阿里云MaxCompute)均体现了数仓的设计本质,它们均没有对外暴露文件系统,而是提供了数据进出的服务接口。比如,Teradata提供了CLI数据导入工具,Redshift提供Copy命令从S3或者EMR上导入数据,BigQuery提供Data Transfer服务,MaxCompute提供Tunnel服务以及MMA搬站工具供数据上传和下载。这个设计可以带来多个优势:

1. 引擎深度理解数据,存储和计算可做深度优化

2. 数据全生命周期管理,完善的血缘体系

3. 细粒度的数据管理和治理

4. 完善的元数据管理能力,易于构建企业级数据中台

而数据中台构建在数据仓库之上,以更优雅、更产品化的形式对外提供服务和价值,同时避免重复建设。其职能可以概括为:

大数据数仓设计过程

提供的主要价值在于:

大数据数仓设计过程

不仅如此,数据中台的实施和落地还要求管理思路和架构组织上的变革。