⾯对爆炸式增长的数据,如何建设⾼效的数据模型和体系,对这些数据进⾏有序和有结构地分类组织和存储,避免重复建设和数据不⼀致性,保证数据的规范性,⼀直是⼤数据系统建设不断追求的⽅向。
数据仓库模型实施过程:
1. ⾸先,在建设⼤数据数据仓库时,要进⾏充分的业务调研和需求分析。这是数据仓库建设的基⽯,业务调研和需求分析做得是否充分直接决定了数据仓库建设是否成功;
2. 其次,进⾏数据总体架构设计,主要根据数据域对数据进⾏划分;按照维度建模理论,构建总线矩阵、抽象出业务过程和维度;3. 再次,对报表抽象整理出相关指标体系,使⽤ OneData ⼯具完成指标规范定义和模型设计;4. 最后,代码研发和运维;
⼀、概述
阿⾥⼤数据建设⽅法论的核⼼:从业务架构设计到模型设计,从数据研发到数据服务,做到数据可管理化、可追溯、可规避重复建设;
1、定位及价值
建设统⼀的,规范的数据接⼊层(ODS)和数据中间层(DWD 和DWS),通过数据服务和数据产品,完成服务于阿⾥的⼤数据系统建设,即数据公共层建设。提供标准化的(Standard)、共享的(Shared)、数据服务(Service)能⼒,降低数据互通成本,释放计算、存储、⼈⼒等资源,以消除业务和技术之痛;
2、体系架构
业务板块:根据业务属性,将业务划分出⼏个相对独⽴的板块,使业务板块之间的指标或业务重叠性较⼩ ;
规范定义:结合⾏业的数据仓库建设经验和阿⾥数据⾃⾝特点,设计出的⼀套数据规范命名体系,规范定义将会被⽤在模型设计中;模型设计:以维度建模理论为基础,基于维度建模总线架构,构建⼀致性的维度和事实(进⾏规范定义),同时,在落地表模型时,基于阿⾥⾃⾝业务特点,设计⼀套规范命名体系;
⼆、规范定义
规范定义指以维度建模作为理论基础,构建总线矩阵,划分和定义数据域、业务过程、维度、定量/原⼦指标、修饰类型、修饰词、时间周期、派⽣指标。
1、名词术语
数据域:指⾯向业务分析,将业务过程或维度进⾏抽象的集合。
1. 将业务过程的⼀个个不可拆分的⾏为事件,如下单、⽀付等⾏为,进⾏分类,每⼀类⾏为事件的集合为⼀个数据域;2. 数据域需要抽象提炼,并且长期维护和更新,但不能轻易变动;
3. 划分数据域时(即对⾏为事件分类),要既能涵盖当前所有的业务需求,⼜能在新业务进⼊时⽆影响地被包含进已有的数据域中和扩展新的数据域;业务过程:指企业的业务活动事件,如下单、⽀付、退款都是业务过程;1. 业务过程是⼀个不可拆分的⾏为事件,业务过程就是企业活动中的事件;
时间周期:⽤来明确数据统计的时间范围或时间点;(如最近30天、⾃然周、截⽌当⽇等)修饰类型:对修饰词的抽象划分;(⽐如,修饰词花呗,它的修饰类型是⽀付⽅式)
修饰词:⾪属于修饰类型,是指除了统计维度以外指标的业务场景的限定抽象;(如在修饰类型⽀付⽅式下:花呗、账户余额、余额宝、银⾏卡,都是修饰词)
度量 / 原⼦指标:度量和原⼦指标含义相同,对某⼀业务⾏为(或业务过程中的不可拆分的⾏为事件)的度量(如,花呗,花了多少钱,具体的⾦额数值就是度量);
1. 度量 / 原⼦指标是业务定义中不可拆分的指标,具有明确业务含义的名词;
维度:是度量的环境,⽤来反映业务的⼀类属性(如,维度订单,是交易域下的⼀类属性),这类属性的集合构成⼀个维度,也可称为实体对象;
1. 维度属于⼀个数据域;
2. 例1:地理维度,其中包含国家、地区、城市、⼤⼭、河流等,所有实体的位置信息的集合,称为地理维度;3. 例2:时间维度,其中包含年、季、⽉、周、⽇、时等;
维度属性:⾪属于⼀个维度,如地理维度⾥⾯的国家名称、国家 ID、省份名称等,都属于维度属性;派⽣指标:派⽣指标 = ⼀个原⼦指标 + 多个修饰词(可选)+ 时间周期;
1. 例:原⼦指标:⽀付⾦额,最近 1 天海外买家⽀付⾦额则为派⽣指标(最近 1 天为时间周期,海外为修饰词,买家作为维度,⽽不作为修饰词)
2、指标体系
1)基本原则
1/1 组成体系之间的关系
1. 派⽣指标有原⼦指标、时间周期修饰词、若⼲其他修饰词组合得到;(见图 9.3)
2. 原⼦指标、修饰类型及修饰词,直接归属在业务过程下,其中修饰词继承修饰类型的数据域;3. 派⽣指标可以选择多个修饰词,修饰词之间的关系为“或”或者“且”,由具体的派⽣指标语义决定;4. 派⽣指标唯⼀归属⼀个原⼦指标,继承原⼦指标的数据域,与修饰词的数据域⽆关;
5. 原⼦指标有确定的英⽂字段名、数据类型和算法说明;派⽣指标要继承原⼦指标的英⽂名、数据类型和算法要求;
1/2 命名约定
1. 命名所⽤术语:指标命名,尽量使⽤英⽂简写,其次是英⽂,当指标英⽂名太长时,可考虑⽤汉语拼⾳⾸字母命名(如中国制造⽤zgzz)。
2. 业务过程:英⽂名:⽤英⽂或英⽂的缩写或者中⽂拼⾳简写;中⽂名:具体业务过程中⽂即可;3. 原⼦指标:英⽂名:动作 + 度量;中⽂名:动作 + 度量;原⼦指标必须挂靠在某个业务过程下;
4. 修饰词:只有时间周期才会有英⽂名,且长度为 2 位,加上 “-” 为 3 位(例 _1d ),其它修饰词⽆英⽂名;
5. 派⽣指标:英⽂名:原⼦指标英⽂名 + 时间周期修饰词(3 位)+ 序号(4 位,如 “_001”);中⽂名:时间周期修饰词 + [ 其它修饰词 ]+ 原⼦指标;
1/3 算法
原⼦指标、修饰词、派⽣指标的算法说明必须让各种使⽤⼈员看得明⽩,包括:1. 算法概述:算法对应的⽤户容易理解的阐述;2. 举例:通过具体例⼦帮助理解指标算法;
3. SQL 算法说明:对于派⽣指标给出 SQL 的写法或者伪代码;
2)操作细则 2/1 派⽣指标的种类
派⽣指标可以分为三类:事务型指标、存量型指标、复合型指标;(按照特性不同,有些需要新建原⼦指标,有些可以在其他类型原⼦指标的基础上增加修饰词形成派⽣指标)
1. 事务型指标:是指对业务活动进⾏衡量的指标;(例:新发商品数、重发商品数、新增注册会员数,这类指标需要维护原⼦指标及修饰词,在此基础上创建派⽣指标)
2. 存量型指标:是指对实体对象(如商品、会员)某些状态的统计;(例:商品总数、注册会员总数,这类指标需要维护原⼦指标及修饰词,在此基础上创建派⽣指标,对应的事件周期⼀般为 “历史载⾄当前某个时间”)
3. 复合型指标:是在事务型指标和复合型指标的基础上复合⽽成的;(例:浏览 UV - 下单买家数转化率,有些需要创建新原⼦指标,有些则可以在事务型或存量型原⼦指标的基础上增加修饰词得到派⽣指标) 2/2 复合型指标的规则
⽐率型:创建原⼦指标,如 CTR、浏览 UV - 下单买家数转化率、满意率等;
1. 例:“最近 1 天店铺⾸页 CTR(点击率)”,原⼦指标为 “CTR”,时间周期为 “最近 1 天”,修饰类型为 “页⾯类型”,修饰词为 “店铺⾸页”;
⽐例型:创建原⼦指标,如百分⽐、占⽐;
1. 例:“最近 1 天⽆线⽀付⾦额占⽐”,原⼦指标为 “⽀付⾦额占⽐”,修饰类型为 “终端类型”,修饰词为 “⽆线”;
变化量型:不创建原⼦指标,增加修饰词,在此基础上创建派⽣指标;
1. 例:“最近 1 天订单⽀付⾦额上 1 天变化量”,原⼦指标为 “订单⽀付⾦额”,时间周期为 “最近 1 天”,修饰类型为 “统计⽅法”,修饰词为“上 1 天变化量”;
变化率型:创建原⼦指标;
1. 例:“最近 7 天海外买家⽀付⾦额上 7 天变化率”,原⼦指标为 “⽀付⾦额变化率”,修饰类型为 “买家地域”(因为此需求中重点强调“海外买家”),时间周期为 “最近 7 天”,修饰词为 “海外买家”;
统计型(均值、分位数):不需要创建原⼦指标,增加修饰词,在此基础上创建派⽣指标;
1. 在修饰类型 “统计⽅法” 下增加修饰词,如⼈均、⽇均、⾏业平均、商品平均、90 分位数、70分位数等;2. 例:“⾃然⽉⽇均 UV(访问量)”,原⼦指标为 “UV”,修饰类型为 “统计⽅法”,修饰词为 “⽇均”;
排名型:创建原⼦指标,⼀般为 top_xxx_xxx ,有时会同时选择 rank 和 top_xxx_xxx 组合使⽤;创建派⽣指标时选择对应的修饰词如下:
1. 统计⽅法(如降序、升序)2. 排名名次(如 TOP10)
3. 排名范围(如⾏业、省份、⼀级来源等)4. 根据什么排序(如搜索次数、PV)
5.
对象集合型:主要指数据产品和应⽤需要展现数据时,将⼀些对象以 k-v 对的⽅式存储在⼀个字段中,⽅便前端展现。⽐如趋势图、TOP 排名对象等。其定义⽅式是,创建原⼦指标,⼀般为 xxx 串;创建派⽣指标时选择对应的修饰词如下:1. 统计⽅法(如降序、升序)2. 排名名次(如 TOP10)3. 排名范围(如⾏业、区域)
4.
3)其他规则
上下层级同时存在时:如最近 1 天⽀付⾦额和最近 1 天 PC 端⽀付⾦额,建议使⽤前者,把 PC 端最为维度属性存放在物理表中体现;
⽗⼦关系原⼦指标存在时:派⽣指标使⽤⼦原⼦指标创建派⽣指标;(如 PV、IPV(商品详情页 PV),当统计商品详情页 PV 时,优先选择⼦原⼦指标)
三、模型设计
1、知道理论
数据模型的维度设计主要以维度建模理论为基础,基于维度数据模型总线架构,构建⼀致性的维度和事实;
2、模型层次
主要分三层:操作数据层(ODS)、公共维度数据层(CDM)、应⽤数据层(ADS);
其中 CDM 数据层包括明细数据层(DWD)和汇总数据层(DWS);
操作数据层(ODS):把操作系统数据⼏乎⽆处理的存放⼦数据仓库系统中;1. 同步:结构化数据增量或全量同步到 MaxCompute;
2. 结构化:⾮结构化(⽇志)结构化处理并存储到 MaxCompute ;
3. 累积历史、清洗:根据数据业务需求及稽核和审计要求保存历史数据、清洗数据;
公共维度模型层(CDM):存放明细事实数据、维表数据及公共指标汇总数据,其中明细事实数据、维表数据⼀般根据 ODS 层数据架构⽣成;公共指标汇总数据⼀般根据维表数据和明细事实数据加⼯⽣成;
CDM 层⼜细分为 DWD 层和 DWS 层,分别是明细数据层和汇总数据层,采⽤维度模型⽅法作为理论基础,采⽤⼀些维度退化⼿法,将维度退化⾄事实表中,减少事实表和维表的关联,提⾼明细数据表的易⽤性;同时在汇总数据层,加强指标的维度退化,采取更多的宽表化⼿段构建公共指标数据层,提升公共指标的复⽤性,减少重复加⼯;主要功能:
1. 组合相关和相似数据:采⽤明细宽表,复⽤关联计算,减少数据扫描;
2. 公共指标统⼀加⼯:基于 OneData 体系构建命名规则、⼝径⼀致和算法统⼀的统计指标,为上层数据产品、应⽤和服务提供公共指标;建⽴逻辑汇总宽表;
3. 建⽴⼀致性维度:建⽴⼀致的数据分析维表,简单数据计算⼝径、算法不统⼀的风险;
应⽤数据层(ADS):存放数据产品个性化的统计指标数据,根据 CDM 层与 ODS 层加⼯;1. 个性指标加⼯:不公⽤性、复杂性(指数型、⽐值型、排名型指标);2. 基于应⽤的数据组装:⼤宽表集市、横表转纵表、趋势指标串;
数据调⽤服务优先使⽤公共维度模型层(CDM)数据,当公共层没有数据时,需评估是否需要创建公共层数据,当不需要建设公⽤的公共层时,⽅可直接使⽤操作数据层(ODS)数据;
应⽤数据层(ADS)作为产品特有的个性化数据⼀般不对外提供数据服务,但是 ADS 作为被服务⽅也需要遵守上述(条件 1)约定;
3、基本原则
1. ⾼内聚和低耦合:将业务相近或者相关、粒度相同的数据设计为⼀个逻辑或者物理模型;将⾼概率同时访问的数据放⼀起,将低概率同时访问的数据分开存储;
2. 核⼼模型与扩展模型分离:核⼼模型包括的字段⽀持常⽤的核⼼业务,扩展型包括的字段⽀持个性化或少了应⽤的需要,不能让扩展模型的字段过多侵⼊核⼼模型,以免破坏核⼼模型的架构简洁性与可维护性;
3. 公共处理逻辑下沉及单⼀:越是底层公⽤的处理逻辑越应该在数据调度依赖的底层进⾏封装与实现,不要让公⽤的处理逻辑暴露给应⽤层实现,不要让公共逻辑多处同时存在;
4. 成本与性能平衡:适当的数据冗余可以换钱查询和刷新性能,不宜过度冗余与数据复制;5. 数据可回滚:处理逻辑不变,在不同时间多次运⾏数据结果确定不变;
6. ⼀致性:具有相同含义的字段在不同表中的命名必须相同,必须使⽤规范定义中的名称;7. 命名清晰、可理解:表名需易于消费者理解和使⽤;
四、模型实施
如何从具体的需求或项⽬转换为可实施的解决⽅案,如何进⾏需求分析、架构设计、详细模型设计等,则是模型实施过程中讨论的内容;
1、业界常⽤的模型实施过程
1/1)Kimball 模型实施过程
Kimball 维度建模主要讨论需求分析、⾼层模型、详细模型和模型审查整个过程;构建维度模型主要经历 4 个阶段: 1/1/1)⾼层模型设计
定义业务过程维度模型的范围,提供每种星形模式的技术和功能描述;
产出⽬标:创建⾼层维度模型图,是对业务过程中的维表和事实表的图形描述;确定维表创建初始属性列表,为每个事实表的创建提议度量;
1/1/2)详细模型设计
对每个星形模型添加属性和度量信息;
详细的维度建模过程是为⾼层模型填补缺失的信息,解决设计问题,并不断测试模型能否满⾜业务需求,确保模型的完备性;确定每个维表的属性和每个事实表的度量,并确定信息来源的位置、定义,确定属性和度量如何填⼊模型的初步业务规则;
1/1/3)模型审查、再设计和验证
主要召集相关⼈员进⾏模型的审查和验证,根据审查结果对详细维度进⾏再设计;
1/1/4)提交 ETL 设计和开发
完成模型详细设计⽂档,提交给 ETL 开发⼈员,进⼊ ETL 设计和开发阶段,由 ETL ⼈员完成物理模型的设计和开发;
1/2)Inmon 模型实施过程
Inmon 对数据模型的定位:扮演着通往数据仓库其他部分的智能路线图的⾓⾊;(建⽴⼀个路线图——数据模型,描述数据仓库各部分是如何结合在⼀起的)
Inmon 将模型分为 3 个层次:ERD(Entity Relationship Diagram,实体关系图)层、DIS(Data Item Set,数据项集)层、物理层(Physical Model,物理模型);
ERD 层是数据模型的最⾼层,描述公司业务中的实体或主题域以及他们之间的关系;DIS 层是数据模型的中间层,描述数据模型的关键字、属性以及细节数据之间的关系;物理层是数据模型的最底层,描述数据模型的物理特性;
Inmon 对于构建数据仓库模型建议采⽤螺旋式开发⽅法,采⽤迭代⽅式完成多次需求;但需要采⽤统⼀的 ERD 模型,才能够将每次迭代的结果整合在⼀起;
ERD 模型是⾼度抽象的数据模型,描述企业完整的数据,⽽每次迭代则是完成 ERD 模型的⼦集,通过 DIS 和物理数据模型实现;
1/3)其他模型实施过程
1. 业务建模,⽣成业务模型,主要解决业务层⾯的分解和程序化;
2. 领域建模,⽣成领域模型,主要是对业务模型进⾏抽象处理,⽣成领域概念模型;
3. 逻辑建模,⽣成逻辑模型,主要将领域模型的概念实体以及实体之间的关系进⾏数据库层次的逻辑化;
4. 物理建模,⽣成物理模型,主要解决逻辑模型针对不同关系数据库的物理化以及性能等⼀些具体的技术问题;
2、OneData 实施过程
2/1)指导⽅针
⾸先,在建设⼤数据数据仓库时,要进⾏充分的业务调研和需求分析。这是数据仓库建设的基⽯,业务调研和需求分析做得是否充分直接决定了数据仓库建设是否成功;
其次,进⾏数据总体架构设计,主要根据数据域对数据进⾏划分;按照维度建模理论,构建总线矩阵、抽象出业务过程和维度;再次,对报表抽象整理出相关指标体系,使⽤ OneData ⼯具完成指标规范定义和模型设计;最后,代码研发和运维;
2/2)实施⼯作流
2/2/1)数据调研
业务调研
1. 不但只了解具体的需求,还要明⽩需求的数据在业务中的意义,帮助我们更好的建仓建模,特别是在划分数据域时;
2. 了解各个业务领域、业务线的业务有什么共同点和不同点,以及各个业务线可以细分为那⼏个业务模块,每个业务模块具体的业务流程有事怎样的;
3. ⼀般各个业务领域独⾃建设数据仓库,业务领域内的业务线由于业务相似、业务相关性较⼤,进⾏统⼀集中建设;
例:需求调研
1. 收集数据使⽤者的需求;(可以找分析师、业务运营⼈员了解他们有什么数据诉求,⼀般更多的就是报表需求)
2. 需求调研的两种途径:⼀是与分析师、业务运营⼈员的沟通(邮件、IM)获知需求;⼆是对报表系统中现有的报表进⾏研究分析;(很多时候,都是由具体的数据需求驱动数据仓库团队去了解业务系统的业务数据)
例:分析师需要了解⼤淘宝(淘宝、天猫、天猫国际)⼀级类⽬的成交⾦额获知需求后,需要考虑的问题:
1. 根据什么(维度)汇总,汇总什么(度量 / 原⼦指标)?(这⾥类⽬是维度,⾦额是度量)2. 明细数据和汇总数据应该怎么设计?
3. 这是⼀个公⽤的报表吗?
4. 是需要沉淀到汇总表⾥⾯,还是在报表⼯具中进⾏汇总?
2/2/2)架构设计
数据域划分(将各个业务⾏为分类)
数据域:指⾯向业务分析,将业务过程或者维度进⾏抽象的集合;
业务过程可以概括为⼀个个不可拆分的⾏为事件,如下单、⽀付、退款;
为保障整个体系的⽣命⼒,数据域需要抽象提炼,并且长期维护和更新,但不轻易变动;
划分数据域原则:既能涵盖当前所有的业务需求,⼜能在新业务进⼊时⽆影响地被包含进已有的数据域中,或者扩展新的数据划分数据域原则:既能涵盖当前所有的业务需求,⼜能在新业务进⼊时⽆影响地被包含进已有的数据域中,或者扩展新的数据域;
例(将业务⾏为分类划分数据域):
构建总线矩阵
明确每个数据域下有哪些业务过程;
业务过程与哪些维度相关,并定义每个数据域下的业务过程和维度;例(构建采购分销数据域的总线矩阵):
2/3)规范定义
主要定义指标体系,包括原⼦指标、修饰词、时间周期、派⽣指标;
2/4)模型设计
主要包括维度及属性的规范定义,维表、明细事实表、汇总事实表的模型设计;
2/5)总结
OneData 的实施过程是⼀个⾼度迭代和动态的过程,⼀般采⽤螺旋式实施⽅法;在总体架构设计完成后,开始根据数据域进⾏迭代式模型设计和评审;
在架构设计、规范定义、模型设计等模型实施过程中,都会引⼊评审机制,以确保模型实施过程的正确性;
因篇幅问题不能全部显示,请点此查看更多更全内容