维度建模数据仓库生命周期简介
近两年,阿里双中台概念炒得如火如荼。笔者认为其中数据中台建设的方法论来源于kimball提出的维度建模。kimball在十几年前出版了《数据仓库生命周期工具箱(第二版)》,其在书中详细的介绍了数据仓库建设的方方面面。
本文主要介绍了kimball提出的基于维度建模的数据仓库生命周期(以下简称维度建模)的基本原则和总体框架。同时,由于《数据仓库生命周期工具箱(第二版)》出版已久,作者将会结合自身的项目经验,谈一些自身的理解。
维度建模三原则
更多的关注业务层面,而非技术层面
从笔者的项目经验中,将技术放在业务之上,是大多由IT部门主导的数仓项目的通病。kimball在开篇声明数据仓库是围绕业务开展的IT项目,并在后续的技术架构、数据建模、BI程序设计中描述了如何让业务用户参与进来,以保证数仓的建设过程中的关键链路上都紧贴业务需求。数仓项目成为一场技术演练,是IT部门领导、数仓主管和开发团队都应该时刻提防的陷阱。
按照维度组织数据,并开放给业务
不同于OLTP系统或者范式建模,维度建模的一大特点是,在数据规范设计以及业务可理解性、易用性中取得很好的平衡,通过冗余牺牲了部分数据库设计规范性,使得非IT技术人员更容易理解数据,更快的访问数据。同时,数据模型是需要对外开放给业务用户的。所以在数据模型设计和数据模型评审中需要有业务用户参加。
采取增量迭代的方式交付成果
维度建模的方法是支持增量迭代的开发方式的,具体的在数据建模中,就是通过新增不同主题域、新增事实表、新增维度表以及扩展维度表属性等方式;
在技术架构上,后端etl系统、前端BI系统以及数据存储系统分离,各部分选用可扩展的组件,根据业务变化及数据量的增长情况进行水平扩展甚至替换,譬如引入新的数据源可能会需要增加新类型数据获取组件。
但同时需要注意的是,增量迭代也需要在初次迭代制定一些规范,譬如数据建模的命名规范、etl规范、报表的设计规范、元数据管理规范等,这些规范也要随着业务的发展不断迭代。
维度建模生命周期总体框架
维度建模的生命周期图(笔者根据自身经验进行了修改)如下:
维度建模生命周期
以下为各部分介绍。
项目群/项目规划
项目指的是从开始到部署上线的一个单次循环,有固定的开始时间和结束时间;项目群则是多个有关联关系的项目。譬如在数据仓库项目进行的同时,可以启动数据治理项目。在这阶段主要的工作是对项目范围的界定,这需要对现有业务需求、业务未来规划、企业目前的数据运营及技术情况有综合的考量,并遵循增量迭代的原则,划分多个项目,根据项目优先级,规划数据仓库的发展路径。然后,需要搭建相关的团队,进行项目进度的规划以及其他项目管理规划。
在这一阶段中,笔者认为还需要进行一项非常重要的工作:在数据仓库建设方法论及数据仓库发展路径中阶段性产出和业务领导、项目发起人乃至企业IT技术负责人取得共识。管理干系人期望需要从项目规划阶段开始。
项目群/项目管理
和大多数项目一样,这里的项目管理也包含了范围、进度、质量、资源、风险、干系人等方面的管理。对于数据仓库项目,kimball总结了一些项目陷入困境的一些征兆,需要项目经理或数仓主管引起警惕:
没有引入业务部门高层有影响力的领导,这有可能会使数仓项目偏离业务;
一次性处理过多的任务,违背增量迭代的原则;
开发过程,业务部门参与过少,认为这是IT部门的项目;
没有对数据源进行可行性分析的情况,强行推进项目;
过于关注etl的操作性和易于开发,而忽略了BI查询性能和易用性;
低估了数据清洗和数据质量保证的工作量;
忽略了数据权限的需求。
笔者补充以下几点:
只看重"看的见"的BI应用成果,而忽略了数据建模和开发的规范性和扩展性,可能会造成烟囱式的数据集市;
忽略了报表和BI应用程序开发部署上线后的运营和维护工作。这里的运营主要指的是对用户的培训以及使用意见反馈的收集,维护主要指业务变化或者上游系统的变化带来的影响的评估及修改工作。
业务调研和数据调研
业务需求影响到数据仓库生命周期的各个环节,包括技术架构的选择、数据建模和开发以及BI应用程序的设计和开发。又分为项目集层面和项目层面的业务需求调研。项目集层面的调研关注整个企业的数据需求,并对需求按业务价值以及可行性(数据可行性和技术可行性)进行优先级排序,来决定如何迭代的进行数据仓库建设;项目层面的需求调研则关注某一领域的需求,对具体的业务过程进行详细的了解,并收集业务过程产生的指标及分析的角度,形成需求文档,作为后续步骤的输入。
《数据仓库生命周期(第二版)》中的第三章对业务调研进行了详细的描述,是笔者认为全书最为精彩的部分。一直以来笔者认为业务需求调研中,"人"的影响因素占比较大,调研过程并无定式。但作者仍然总结了调研的一些最佳实际。笔者参加过许多这样的调研,其中遇到的问题及困境,都能在其中找到相应的解决方法。
值得注意的是,在业务调研的同时,需要同时进行数据调研。项目群层面的调研,需要回答"哪些业务已经IT系统化,数据获取是否有难度";而项目层面的调研,需要了解系统的数据以何种方式存在哪里,以及业务需求和数据是否匹配。
技术架构路线
一个较常见的总体架构包含ETL系统,数据存储服务器以及BI应用程序,如下图:
数据数仓架构和其他软件开发技术框架有一个显著的区别是元数据驱动。元数据是描述"数据"的数据,包含了数据的定义、生产、使用等信息,一般分为业务元数据,技术元数据,过程元数据。
数据建模和数据开发路线
这部分工作是将数据从源数据系统加工到数据存储服务器中,其中目标表的格式采用维度建模的方法设计而成。此路线包含三部分:
维度建模,即以"事实-维度"的组织方式进行数据库逻辑建模,可以以四个步骤循环进行这部分工作:选择业务过程-声明粒度-确定维度-确定事实(度量)。需要强调的是,此步骤强烈建议和业务部门代表一起讨论和审查最后的结果。
物理设计,将维度建模产出的逻辑模型结合技术架构中选用的具体数据库,进行详细的存储位置、物理表、分区、索引设计以及源数据到目标数据的映射关系的确定
ETL设计与开发,编写程序将数据从源数据抽取、转换并装载到维度建模设计好的目标表中。这部分工作将耗费整个生命周期过半的时间,并且充满变数——业务需求的变更、源系统数据质量、选用的架构组件的支持度、多达三十多项的ETL子系统等都会对其影响。
这里有一些建议用于降低风险:
在开始开发工作前前,对ETL系统进行规划,制定准则用于规范开发;
从业务需求阶段开始,持续的对数据源进行探索及评估;
如果有可能,和源业务系统开发人员制定一些数据规范,让其对数据质量负责。
BI应用程序路线
BI应用程序是业务用户享用数仓建设成果的地方。通常的形式有报表、仪表盘、即席查询、数据挖掘程序。
BI分析有五个层次:
第一层次,监控业务活动,通常表现为仪表盘、标准报表;
第二层次,识别异常,可以在原有的仪表盘和标准报表添加一些标记(不同的颜色或其他提醒)或者邮件短信等方式来实现;
第三层次,确定异常原因,通常需要借助一些统计分析工具或者数据挖掘算法;
第四层次,模型提供决策方案,通常需要借统计分析工具和数据挖掘算法,如敏感性分析、蒙特卡洛仿真等;
第五层级,采取行动并跟踪效果,这时候要求数据仓库具备通过api或者SOA等方式访问业务操作系统。
五个层次不同程度的支持业务决策,对数据仓库的能力要求也越来越高。
部署上线
在以上三条路线后,我们需要将各部分功能集成到一起并进行集成测试,需要做到以下几点:
为各组件及整体制定严谨的测试方案;
数据质量测试,保证装载入库的数据是正确的;
ETL调度测试,保证ETL程序如预期执行;
性能测试;
部署程序测试等。
运营维护
包括前端和后端两部分:
前端:监控用户的使用情况,包括访问频率、访问速度,访问内容等;提供使用手册、培训或者咨询渠道;主动收集用户使用反馈建议和意见等。
后端:监控ETL的完成情况;监控数据存储的增长以及数据访问的性能指标;定期进行备份和恢复测试;对用户反馈的数据质量问题予以及时解决等。
发展增长
前面提到,数据仓库建设应该增量迭代,那么在两次迭代之间项目集经理或者数仓主管并不能高枕无忧。一方面,我们需要对上次迭代进行复盘总结,包括成功的经验及失败的教训;另外一方面,需要"推销"现有的建设成果,以获得更多的支持;还有,需要评估现有环境是否能够继续满足用户或者领导的期望。
用户的期望总是随着每次成功的迭代而增长。在数据仓库建设过程中,有许多升级的路径:例如从数据实时性中,从批处理到准实时再到实时;例如前文提到的BI分析的五个层次。
至此,维度建模的总体原则和总体框架介绍完毕。笔者再次强烈推荐《数据仓库生命周期工具箱(第二版)》,无论你是技术部门领导还是对数据运营强烈渴望的业务用户,亦或是已经历多个项目的开发人员,都可以从中获得不少收获。也只有企业内部各方对数据仓库建设的方法论取得一致认识时,更多的数据项目才会取得成功。