暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

8000字详解数据产品经理眼中的数据仓库建设

PlayData 2021-12-31
1176

前段时间有个朋友说想了解一下数据仓库,但是网上的文章太多太杂,看不明白,我也顺便看了一下市面上了解数据仓库的资料几乎都是给技术人员看的,作为非IT行业的朋友理解起来比较困难。今天我以数据产品经理的视角来全局介绍一下数据仓库的建设,希望能让非技术的朋友们也能理解数据仓库的建设。

 

数据仓库的建设,就像是烹饪,不过是运用各种数据来制作数据大餐。类比一下,看看下面的美食制作流程图。我们一般做菜,可以分为食材选购、食材处理、烹饪 3个步骤,即可获得美味佳肴。



映射到数据生产过程,是不是可以理解为,食材选购—数据采集、食材处理—数据ETL、烹饪—数据整合。

 



再详细一点拆分到我们的整个数据生产过程,可以看到下面的示意图。

 

 

在美食制作的过程中,食材选购、食材处理、烹饪每一个步骤都至关重要,同样在数据生产过程中,数据的采集,清洗与管理也是十分重要的。在数据生产的过程中,有一项建设至关重要,就是数据仓库的建设。


 

一、什么是数据仓库

 

【官方定义】数据仓库是一个面向主题的、集成的、随时间变化的、但信息本身相对稳定的数据集合,用于对管理决策过程的支持

 

数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它是单个数据存储,出于分析性报告和决策支持目的而创建。为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。

 

二、为什么需要数据仓库

 

举个例子:

 

有一家新成立的A跨境电商公司,创业初期,请了几个人运用简单的网页前端 + 几台服务器 + 一个MySQL,就开始做生意了。

 

经过一段时间的努力,客户和订单都多起来了,之前的配置进行普通查询已经有压力了,通过升级机器配置,业务数字和指标还可以勉强从业务数据库里查询。

 

随着业务爆发式的增长,数据量巨增,公司角色也开始多了起来,开始有了 CEO、CMO、CIO。高管们关心的问题,从最初非常粗放的:“昨天的收入是多少”、“上个月的 PV、UV 是多少”,逐渐演化到非常精细化和具体的用户的集群分析,特定用户在某种使用场景中,例如“20~30岁女性用户在过去五年的第一季度化妆品类商品的购买行为与公司进行的促销活动方案之间的关系”。

 

这类非常具体,且能够对公司决策起到关键性作用的问题,就很难从业务数据库调取出来。原因在于:

1)业务数据库中的数据结构是为了完成交易而设计的,不是为了而查询和分析的便利设计的。

2)业务数据库大多是读写优化的,即又要读(查看商品信息),也要写(产生订单,完成支付)。因此对于大量数据的读(查询指标,一般是复杂的只读类型查询)是支持不足的。

3)而怎么解决这个问题,此时我们就需要建立一个数据仓库,专门用于分析数据使用。

 

构建数据仓库的主要目的在于为企业提供一个决策分析用的工具,帮助决策人员更好地制定企业策略,或找出企业的潜在问题,提高客户满意度,最终提高企业竞争力


三、数据仓库与数据库的关系


二者的联系:


数据仓库的出现,并不是要取代数据库。大部分数据仓库还是用关系数据库管理系统来管理的。可以说,数据库、数据仓库相辅相成、各有千秋。


二者的区别:



 

因此,数据仓库和数据库的使用场景还是有所不同的。事务型数据库专注于事务处理(企业的业务运营),而数据仓库更擅长于复杂的数据分析。各司其职,互不干扰。简单一句话可以把它理解为,数据库主要负责数据更新,数据仓库主要负责数据分析。


 

四、数据仓库特点

 

1)面向主题:

 

操作型数据库的数据组织面向事务处理任务,而数据仓库中的数据是按照一定的主题域进行组织。主题是指用户使用数据仓库进行决策时所关心的重点方面,一个主题通常与多个操作型信息系统相关。主题是与传统数据库的面向应用相对应的,是一个抽象概念,是在较高层次上将企业信息系统中的数据综合、归类并进行分析利用的抽象,每一个主题对应一个宏观的分析领域。

 

2)数据集成:

 

数据仓库的数据有来自于分散的操作型数据,将所需数据从原来的数据中抽取出来,进行加工与集成,统一与综合之后才能进入数据仓库。

 

3)不可更新:

 

数据仓库主要是为决策分析提供数据,所涉及的操作主要是数据的查询。

 

4)随时间而变化:

 

传统的关系数据库系统比较适合处理格式化的数据,能够较好的满足商业商务处理的需求。稳定的数据以只读格式保存,且不随时间改变。

 

5)数据分层:

 

数据在每一层进行特定的处理,保留了大量的中间层数据,将来业务变更的时候可以从已有的中间层数据重新计算而不需要重头再来,大大地减少了重复开发。


通过分层可以看到数据在整个仓库中的流转,方便掌握数据的生命周期,每一层负责特定的职责,便于使用者理解使用。

 

数据分层的好处:

 

  • 数据结构化更清晰:每一个数据分层都有它的作用域和职责,在使用表的时候能更方便地定位和理解。

  • 数据血缘追踪:提供给外界使用的是一张业务表,但是这张业务表可能来源很多张表。如果有一张来源表出问题了,我们可以快速准确的定位到问题,并清楚每张表的作用范围。

  • 增强数据复用能力:减少重复开发,通过数据分层规范化,开发一些通用的中间层数据,能够减少重复计算,提高单张业务表的使用率,提升系统的执行效率。

  • 简化复杂的问题:把一个复杂的业务分成多个步骤实现,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。

  • 减少业务的影响:业务可能会经常变化,这样做就不必改一次业务就需要重新接入数据。

  • 统一数据口径:通过数据分层,提供统一的数据出口,统一对外输出的数据口径。

 

 

五、数据仓库架构

 

在《DAMA数据管理知识体系指南中文版》中提到了操作型数据存储(ODS),数据仓库(DW),数据集市(DM),其实这就是数据分层的原始的指导建议,其中操作型数据存储是满足多个业务系统获取数据并制作操作型报表的需求,保留半年以内的明细准实时数据;数据仓库是为了管理决策、战略分析和计划提供单一整合点,保留长期的明细和汇总数据;数据集市是用于特定部门或公共分析需求并定制的,保留中期的明细和汇总数据,采用维度建模方式。下面是比较通用的数据仓库架构设计。

 



操作数据存储(ODS,Operation Data Store)层:是最接近数据源中数据的一层,数据源中的数据,经过抽取、洗净、传输,也就是ETL之后,装入本层;一般来说ODS层的数据和源系统的数据是同构的,主要目的是简化后续数据加工处理的工作。从数据粒度上来说ODS层的数据粒度是最细的。

 

数据模型层(DW,Data Model)层:数据模型层是我们在做数据仓库时要核心设计的一层,本层将从 ODS 层中获得的数据按照主题建立各种数据模型,每一个主题对应一个宏观的分析领域,数据模型层排除对决策无用的数据,提供特定主题的简明视图。在DW层会保存BI系统中所有的历史数据,例如保存10年的数据。

 

数据集市(DM,Data Mart)层/数据应用(ADS,Application Data Service)层:存放的是轻度聚合的数据,也可以称为数据应用层,基于DW上的基础数据,整合汇总成分析某一个主题域的报表数据。主要是提供给数据产品和数据分析使用的数据。

 

在实际构建过程中,业界也在不断探索和完善数据分层架构,主要集中在DW层,将DW层又细分为 DWD(Data Warehouse Detail)层、DWM(Data Warehouse Middle)层和DWS(Data Warehouse Service)层。

 

数据明细层:DWD(Data Warehouse Detail)

该层一般保持和ODS层一样的数据粒度,并且提供一定的数据质量保证,在ODS的基础上对数据进行加工处理,提供更干净的数据。同时,为了提高数据明细层的易用性,该层会采用一些维度退化手法,当一个维度没有数据仓库需要的任何数据时,就可以退化维度,将维度退化至事实表中,减少事实表和维表的关联。

 

数据中间层:DWM(Data Warehouse Middle)

该层会在DWD层的数据基础上,对数据做轻度的聚合操作,生成一系列的中间表,提升公共指标的复用性,减少重复加工处理数据。简单来说,就是对通用的维度进行聚合操作,算出相应的统计指标,方便复用。

 

数据服务层:DWS(Data Warehouse Service)

该层数据表会相对比较少,大多都是宽表(一张表会涵盖比较多的业务内容,表中的字段较多)。按照主题划分,如订单、用户等,生成字段比较多的宽表,用于提供后续的业务查询,OLAP分析,数据分发等。

 

公共维度层(DIM,Dimension):

基于维度建模理念思想,建立整个企业的一致性维度。降低数据计算口径和算法不统一风险。公共维度层的表通常也被称为逻辑维度表,维度和维度逻辑表通常一一对应。

 

我们再来看到另一种数据仓库设计架构:

  

 

阿里巴巴的数据体系中,建议将数据仓库分为三层,自下而上为:数据引入层(ODS,Operation Data Store)、数据公共层(CDM,Common Data Model)和数据应用层(ADS,Application Data Service)。

 

数据引入层ODS(Operation Data Store):存放未经过处理的原始数据至数据仓库系统,结构上与源系统保持一致,是数据仓库的数据准备区。主要完成基础数据引入到MaxCompute的职责,同时记录基础数据的历史变化。

 

数据公共层CDM(Common Data Model,又称通用数据模型层),包括DIM维度表、DWD和DWS,由ODS层数据加工而成。主要完成数据加工与整合,建立一致性的维度,构建可复用的面向分析和统计的明细事实表,以及汇总公共粒度的指标。

 

公共维度层(DIM):基于维度建模理念思想,建立整个企业的一致性维度。降低数据计算口径和算法不统一风险。公共维度层的表通常也被称为逻辑维度表,维度和维度逻辑表通常一一对应。

 

公共汇总粒度事实层(DWS):以分析的主题对象作为建模驱动,基于上层的应用和产品的指标需求,构建公共粒度的汇总指标事实表,以宽表化手段物理化模型。构建命名规范、口径一致的统计指标,为上层提供公共指标,建立汇总宽表、明细事实表。公共汇总粒度事实层的表通常也被称为汇总逻辑表,用于存放派生指标数据。

 

明细粒度事实层(DWD):以业务过程作为建模驱动,基于每个具体的业务过程特点,构建最细粒度的明细层事实表。可以结合企业的数据使用特点,将明细事实表的某些重要维度属性字段做适当冗余,即宽表化处理。明细粒度事实层的表通常也被称为逻辑事实表。

 

数据应用层ADS(Application Data Service):存放数据产品个性化的统计指标数据。根据CDM与ODS层加工生成。

 

 

六、数据仓库模型

 

维度建模是专门用于分析型数据库、数据仓库、数据集市建模的方法。这里牵扯到两个基本的名词:维度,事实。

 

维度:维度是维度建模的基础和灵魂,在维度建模中,将度量成为事实,将环境描述为维度,维度是用于分析事实所需的多样环境。例如,在分析交易过程中,可以通过买家、卖家、商品和时间等维度描述交易发生的环境。

 

事实:事实表作为数据仓库维度建模的核心,紧紧围绕着业务过程来设计,通过获取描述业务过程的度量来表达业务过程,包含了引用的维度和与业务过程有关的度量。事实表中一条记录所表达的业务细节被称之为粒度。通常粒度可以通过两种方式来表述:一种是维度属性组合所表示的细节程度,一种是所表示的具体业务含义。

 

简单的说,维度表就是你观察该事物的角度(维度),事实表就是你要关注的内容。例如用户使用滴滴打车,那么打车这件事就可以转化为一个事实表,即打车订单事实表,然后用户对应一张用户维度表,司机对应一张司机维度表。

 

维度建模的三种模式:

 

星型模式(Star Schema)

 


星型模型架构是一种非正规化的结构,特点是有一张事实表,多张维度表,是不存在渐变维度的,事实表和维度表通过主外键相关联,维度表之间是没有关联,因为维度表的数据冗余,所以统计查询时不需要做过多外部连接。

 

星型模式是以事实表为中心,所有的维度表直接连接在事实表上,像星星一样。

 

雪花模式(Snowflake Schema)

 

雪花模型架构就是将星型模型中的某些维度表抽取成更细粒度的维度表,然后让维度表之间也进行关联,通过最大限度的减少数据存储量以及联合较小的维度表来改善查询性能。

 

下图为使用雪花模式进行维度建模的关系结构:

 


星形模式中的维表相对雪花模式来说要大,而且不满足规范化设计。雪花模型相当于将星形模式的大维表拆分成小维表,满足了规范化设计。然而这种模式在实际应用中很少见,因为这样做会导致开发难度增大,并且这种模型不太容易理解,维护成本比较高,而且性能方面需要关联多层维表,性能也比星型模型要低。所以一般不是很常用。

 

星座模式(Constellation Schema)


数据仓库由多个主题构成,包含多个事实表,而维表是公共的,可以共享,这种模式可以看做星型模式的汇集,因而称作星系模式或者事实星座模式。

 


事实上,星座模式是数据仓库最常使用的数据模式,尤其是企业级数据仓库(EDW)。这也是数据仓库区别于数据集市的一个典型的特征,从根本上而言,数据仓库数据模型的模式更多是为了避免冗余和数据复用,套用现成的模式,是设计数据仓库最合理的选择。在业务发展后期,绝大部分维度建模都采用的是星座模式。


七、数据仓库实施过程


人员:数据产品经理+数据仓库工程师


数据产品经理:负责统筹建设工作,具体负责数据需求调研及规划,数据规范定义以及指标设计定义,参与数据模型设计。


数据仓库工程师:负责数据模型设计,数据仓库实现。


具体的实施路径如下图。

 



数据仓库落地实施路径主要有5个步骤,分别是:业务调研、数据规划、规范定义、模型设计、模型实施。


1、业务调研

 

在构建数据仓库之前,首先需要确定构建数据仓库的目标与需求,并进行全面的业务调研。需要了解真实的业务需求,以及确定数据仓库要解决的问题。

 

1)需求调研

 

充分的业务调研和需求分析是数据仓库建设的基石,直接决定数据仓库能否建设成功。在数仓建设项目启动前,需要请相关的业务人员介绍具体的业务,以便明确各个团队的分析员和运营人员的需求,沉淀出相关文档。

 

可以通过调查表和访谈等形式详细了解以下信息:

  • 用户的组织架构和分工界面。

    例如,用户可能分为数据分析、运营和维护部门人员,各个部门对数据仓库的需求不同,需要对不同部门分别进行调研。

  • 用户的整体业务架构,各个业务板块之间的联系和信息流动的流程。需要梳理出整体的业务数据框架。

  • 已有的业务板块的主要功能及获取的数据。


例如:



2)需求分析

 

完成业务调研后,需要进一步收集数据使用者的需求,进而对需求进行深度的思考和分析。因为在未考虑数据分析师和业务运营人员的数据需求的情况下,单纯根据业务调研结果构建的数据仓库可用性差

 

需求分析的途径有两种:

  • 根据与分析师和业务运营人员的沟通获知需求。

  • 对报表系统中现有的报表进行研究分析。

 

在需求分析阶段,需要沉淀出业务分析或报表中的指标,以及指标的定义和粒度。粒度可以作为维度的输入。


3)分析业务过程

 

业务过程可以概括为一个个不可拆分的行为事件。用户的业务系统中,通过埋点或日常积累,通常已经获取了充足的业务数据。为理清数据之间的逻辑关系和流向,首先需要理解用户的业务过程,了解过程中涉及到的数据系统。

 

可以采用过程分析法,将整个业务过程涉及的每个环节一一列清楚,包括技术、数据、系统环境等。在分析企业的工作职责范围(部门)后,也可以借助工具通过逆向工程抽取业务系统的真实模型。可以参考业务规划设计文档以及业务运行(开发、设计、变更等)相关文档,全面分析数据仓库涉及的源系统及业务管理系统:

 

  • 每个业务会生成哪些数据,存在于什么数据库中。

  • 对业务过程进行分解,了解过程中的每一个环节会产生哪些数据,数据的内容是什么。

  • 数据在什么情况下会更新,更新的逻辑是什么。


2、数据规划

 

划分数据域


数据仓库是面向主题(数据综合、归类并进行分析利用)的应用。数据仓库模型设计除横向的分层外,通常也需要根据业务情况纵向划分数据域。数据域是联系较为紧密的数据主题的集合,是业务对象高度概括的概念,目的是便于管理和应用数据。

 

通常,需要阅读各源系统的设计文档、数据字典和数据模型,研究逆向导出的物理数据模型。进而,可以进行跨源的主题域合并,跨源梳理出整个企业的数据域。

 

例如:



3、规范定义


1)定义维度


在划分数据域、构建总线矩阵时,需要结合对业务过程的分析定义维度。以A电商公司的营销业务板块为例,在交易数据域中,重点考察确认收货(交易成功)的业务过程。

 

在确认收货的业务过程中,主要有商品和收货地点(假设收货和购买是同一个地点)两个维度所依赖的业务角度。例如:



作为维度建模的核心,在企业级数据仓库中必须保证维度的唯一性。以A公司的商品维度为例,有且只允许有一种维度定义。例如,省份code这个维度,对于任何业务过程所传达的信息都是一致的。


2)构建总线矩阵

 

明确每个数据域下有哪些业务过程后,即可构建总线矩阵。需要明确业务过程与哪些维度相关,并定义每个数据域下的业务过程和维度。如下所示是A公司电商板块交易功能的总线矩阵,定义了购买省份、购买城市、类目名称、类目ID、品牌名称、品牌ID、商品名称、商品ID、成交金额等维度。

 

例如:



 

3)明确统计指标

 

原子指标是明确的统计口径、计算逻辑:原子指标=业务过程+度量。

派生指标即常见的统计指标:派生指标=时间周期+修饰词+原子指标。

原子指标的创建需要在业务过程定义后方才可创建。

派生指标的创建一般需要在了解具体报表需求之后展开,在新建派生指标前必须新建好原子指标。

 

注意事项如下:

原子指标、修饰类型及修饰词,直接归属在业务过程下,其中修饰词继承修饰类型的数据域。

派生指标可以选择多个修饰词,由具体的派生指标语义决定。例如,支付金额为原子指标,则客单价(支付金额除以买家数)为派生指标。

派生指标唯一归属一个原子指标,继承原子指标的数据域,与修饰词的数据域无关。


4、模型设计


1)数据引入层(ODS)


ODS层主要包括的数据例如有:交易系统订单详情、用户信息详情、商品详情等。这些数据未经处理,是最原始的数据。逻辑上,这些数据都是以二维表的形式存储。虽然严格的说ODS层不属于数仓建模的范畴,但是合理的规划ODS层并做好数据同步也非常重要。

 

2)公共维度汇总层(DIM)


公共维度汇总层DIM(Dimension)基于维度建模理念,建立整个企业的一致性维度。

公共维度汇总层(DIM)主要由维度表(维表)构成。维度是逻辑概念,是衡量和观察业务的角度。维表是根据维度及其属性将数据平台上构建的物理化的表,采用宽表设计的原则。

 

设计维表的主要步骤如下:

  • 初步定义维度。保证维度的一致性。

  • 确定相关维表。

  • 确定维度属性。


3)明细粒度事实层(DWD)


事实表(事实模型,又称事实逻辑表)作为数据仓库维度建模的核心,紧紧围绕着业务过程进行设计。业务过程是通过事实表的度量、引用的维度与业务过程有关属性的方式获取。

 

事实表设计方法:

  • 选择业务过程

  • 确定粒度

  • 确定维度

  • 确定事实

  • 关联维度

 

4)公共汇总粒度事实层(DWS)


公共汇总粒度事实层DWS(Data Warehouse Summary)以分析的主题对象作为建模驱动,基于上层的应用和产品的指标需求构建公共粒度的汇总指标事实表。公共汇总层的一个表至少会对应一个派生指标。

 

进行DWS层设计时还需遵循以下原则:

  • 数据公用性:需考虑汇总的聚集是否可以提供给第三方使用。

  • 不跨数据域:数据域是在较高层次上对数据进行分类聚集的抽象。数据域通常以业务过程进行分类,如交易统一划到交易域下,商品的新增、修改放到商品域下。

  • 区分统计周期:在表的命名上要能说明数据的统计周期,如_1d 表示最近1天, td 表示截至当天,nd 表示最近N天。

 

5、模型实施


根据步骤4的模型设计进行模型实施工作,包含模型生成、结果验证、模型上线等工作流程。

 

完成上述工作,我们的数据仓库就可以对外进行数据支持了,下面介绍一些主流的数据仓库工具。


八、主流数据仓库工具介绍


传统行业以及互联网行业建设数据仓库的时候用到的一些工具做些梳理。

 

1)传统行业

数据库:Oracle、DB2、TD(MPP结构,列式存储)、GP(MPP结构,列式存储)、SybaseIQ(MPP结构,列式存储)、MySQL 、Inforbright、MsSQL、等。

ETL工具:Informatica、DataStage、Kettle、Automation、SSIS、企业内部调度工具等。

可视化工具:Tableau、Power BI等。

 

2)互联网行业

离线仓库架构:Sqoop+Hadoop+Hive/Spark+MySQL/Hbase+Echarts/Tableau/Highchars

实时架构:Flume+Kafka+Storm/Spark Streaming+Hbase/Redis+Echarts/Tableau/Highchars


本文从数据仓库的定义、特点、架构、模型到实施等8个方面来全面介绍数据仓库的相关内容。

 

在实际落地过程中,数据仓库的建设是一件需要投入极大人力物力的工程,也是企业进行数字化转型的必经之路,从信息化到智能化,由数据驱动业务的关键步骤。



参考资料:

[1] Ralph Kimball, Margy Ross, 谭明金. 数据仓库工具箱[M]. 电子工业出版社, 2003.

[2] https://help.aliyun.com/document_detail/117432.html

[3] https://support.huaweicloud.com/function-dws/index.html

文章转载自PlayData,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论