Hadoop数仓建设之指标管理

x33g5p2x  于10个月前 转载在 Hadoop  
字(3.5k)|赞(0)|评价(0)|浏览(175)

🌸今天主要想和大家介绍一下数据仓库的建设中关于数据表的设计,我们这里主要讲述当下较为流行的流式数据模型,往期的内容大家可以查看下面👇:

  • 第一篇: Hadoop之数据仓库概述.
  • 第二篇: hadoop数仓建设之日志采集.
  • 第三篇: Hadoop数仓建设之数据同步.
  • 第四篇: Hadoop数仓建设之数据模型.

🐱最近实习里自己负责了一个小项目,因为前面两个项目的数据仓库的设计都是带我的姐姐设计的,做到第三个的时候,我强烈要求自己独立完成数据源配置,数据仓库设计,数据开发这一套流程,于是将这一部分进行总结。

1.维度建模

纬度建模的逻辑结构如下:

我们来解释一下这些名词

  • 数据域:指面向业务分析,将业务过程或者维度进行抽象的集合。 其中,业务过程可以定义为一个个不可拆分的行为事件,在业务过程之下,可以定义指标。维度是指度量的环境,如买家下单事件,买家是维度。 为保障整个体系的生命力,数据域是需要数据域抽象提炼,并且长期维护和更新的,但不轻易变动。
  • 业务过程:指企业的业务活动事件,如下单、支付、退款都是业务过程。 请注意,业务过程是一个不可拆分的行为事件,通俗地讲,业务过程就是企业活动中的事件。
  • 时间周期: 用来明确数据统计的时间范用或者时间点,如最近 30 天、自然周、截至当日等。
  • 修饰类型:是对修饰词的一种抽象划分。修饰类型从属于某个业务域,如日志域的访问终端类型涵盖无线端、 PC 端等修饰词。
  • 修饰词:指除了统计维度以外指标的业务场景限定抽象。修饰词隶属于一种修饰类型,如在日志域的访问终端类型下,有修饰词 PC 端、无线端等。
  • 原子指标:原子指标和度自含义相同,基于某一业务事件行为下的度量,是业务定义中不可再拆分的指标,具有明确业务含义的名词,如支付金额。
  • 维度:维度是度量的环境,用来反映业务的一类属性,这类属性的集合构成一个维度,也可以称为实体对象。 维度属于一个数据域,如地理维度(其中包挤国家、地区、 省以及城市等级别的内容)、时间维度(其中包括年、季、月、周、日等级别的内容) 。
  • 维度属性: 维度属性隶属于一个维度,如地理维度里面的国家名称、同家 ID、省份名称等都属于维度属性。
  • 派生指标:派生指标=一个原子指标+多个修饰词(可选)+时间周期。 可以理解为对原子指标业务统计范罔的圈定。 如原子指标 : 支付金额,最近1天海外买家支付金额则为派生指标(最近1天为时间周期,海外为修饰词,买家作为维度,而不作为修饰词)

2. 指标体系

在讲述指标时,会涵盖其组成体系(原子指标、派生指标、修饰类型、修饰词、时间周期),将它们作为一个整体来解读。

2.1 组成体系之间的关系

  • 派生指标:派生指标由原子指标、时间周期修饰词、若干其他修饰词组合得到。

举个例子:原子指标为bug数,派生指标为每月各分支的bug数。

  • 原子指标、修饰类型及修饰词,直接归属在业务过程下,其中修饰词继承修饰类型的数据域。
  • 派生指标可以选择多个修饰词,修饰词之间的关系为“或”或者 “且”,由具体的派生指标语义决定。
  • 派生指标唯一归属一个原子指标,继承原子指标的数据域, 与修饰词的数据域无关。
  • 原子指标有确定的英文字段名、数据类型和算法说明;派生指标要继承原子指标的英文名、数据类型和算法要求。

2.2 命名规范

  • 命名所用术语。指标命名,尽量使用英文简写,其次是英文,当指标英文名太长时,可考虑用汉语拼音首字母命名。如中国质造,用 zgzc。
  • 业务过程。英文名:用英文或英文的缩写或者中文拼音简写;中文名:具体的业务过程中文即可。
  • 原子指标。英文名 :动作+度量:中文名:动作+度量。原子指标
    必须挂靠在某个业务过程下。支付金额:pay_fee
  • 修饰词。只有时间周期才会有英文名,且长度为 2 位,加上“_”
    为 3 位,例如_1d。其他修饰词无英文名。一般的事件修饰如下:

  • 派生指标。英文名 : 原子指标英文名+时间周期修饰词( 3 位,例如_ Id) +序号( 4 位,例如一001 ); 中文名:时间周期修饰词+[其他修饰词]+原子指标。

2. 操作细则

2.1 派生指标的种类

派生指标可以分为三类 : 事务型指标、存量型指标和复合型指标。 按照其特性不同,有些必须新建原子指标,有些可以在其他类型原子指标的基础上增加修饰词形成派生指标。

  • 事务型指标 : 是指对业务活动进行衡量的指标。例如新发商品数、重发商品数、新增注册会员数、订单支付金额,这类指标需维护原子指标及修饰词,在此基础上创建派生指标。
  • 存量型指标:是指对实体对象(如商品、会员)某些状态的统计。例如商品总数、注册会员总数,这类指标需维护原子指标及修饰词,在此基础上创建派生指标,对应的时间周期一般为“历史截至当前某个时间”。
  • 复合型指标:是在事务型指标和存量型指标的基础上复合而成的。例如浏览 UV-下单买家数转化率,有些需要创建新原子指标,有些则可以在事务型或存量型原子指标的基础上增加修饰词得到派生指标。

2.2 复合型指标的规则

  • 比率型 : 创建原子指标,如 CTR、浏览 UV-下单买家数转化率、满意率等。例如,“最近 1 天店铺首页 CTR”,原子指标为“CTR”,时间周期为“最近 l 天”,修饰类型为“页面类型”,修饰词为“店铺首页”。
  • 比例型 : 创建原子指标,如百分比、占比。例如“最近 1 天无线
    支付金额占比”,原子指标为“支付金额占比”,修饰类型为“终 端类型”,修饰词为“无线”。
  • 变化量型:不创建原子指标,增加修饰词,在此基础上创建派生
    指标。例如,“最近1天订单支付金额上1天变化量”,原子指标 为“订单支付金额”,时间周期为“最近 1 天”,修饰类型为“统 计方法”,修饰词为“上1天变化量”。
  • 变化率型:创建原子指标。例如,“最近 7 天海外买家支付金额
    上 7 天变化率”,原子指标为“支付金额变化率”,修饰类型为“买家地域”,修饰词为“海外买家”。
  • 统计型(均值、分位数等):不创建原子指标,增加修饰词,在此基础上创建派生指标;在修饰类型 “统计方法”下增加修饰词, 如人均、日均、行业平均、商品平均 、 90 分位数 、 70 分位数等。 例如,“自然月日均 UV”,原子指标为“UV”,修饰类型为“统计方法”,修饰词为“日均”。
  • 排名型 : 创建原子指标, 一般为 top_xxx_xxx,有时会同时选择rank 和 top_xxx _xxx 组合使用。创建派生指标时选择对应的修饰词。
  • 对象集合型 : 主要是指数据产品和应用需要展现数据时,将一些对象以 k-v 对的方式存储在一个字段中,方便前端展现。比如趋势图、 TOP 排名对象等。

3. 模型设计

数据公共层设计理念遵循维度建模思想,数据模型的维度设计主要以维度建模理论为基础,基于维度数据模型总线架构,构建一致性的维度和事实。

3.1 层次模型

  • ODS层:操作数据层,把操作系统数据几乎无处理地存放在数据仓库系统中。
  • CDM层:公共维度模型层,存放明细事实数据、维表数据及公共指标汇总数据,其中明细事实数据、维表数据一般根据 ODS 层数据加工生成;公共指标汇总数据一般根据维表数据和明细事实数据加工生成。CDM 层又细分为 DWD 层和 DWS 层,分别是明细数据层和汇总数据层,采用维度模型方法作为理论基础,更多地采用一些维度退化手法,将维度退化至事实表中,减少事实表和维表的关联,提高明细数据表的易用性;同时在汇总数据层,加强指标的维度退化,采取更多的宽表化手段构建公共指标数据层,提升公共指标的复用性,减少重复加工。其主要功能:采用明细宽表,复用关联计算,减少数据扫描。
  • ADS层:应用数据层,存放数据产品个性化的统计指标数据,根据CDM 层与 ODS 层加工生成 。如:不公用性、复杂性(指数型、比值型、排名型指标)。

这三层数据结构如下:

3.2 基本原则

  1. 高内聚和低辑合

一个逻辑或者物理模型由哪些记录和字段组成,应该遵循最基本的软件设计方法论的高内聚和低藕合原则。主要从数据业务特性和访问特性两个角度来考虑:将业务相近或者相关、粒度相同的数据设计为一个逻辑或者物理模型:将高概率同时访问的数据放一起,将低概率同时访 问的数据分开存储。

  1. 核心模型与扩展模型分离

建立核心模型与扩展模型体系,核心模型包括的宇段支持常用的核心业务,扩展模型包括的字段支持个性化或少量应用的需要,不能让扩展模型的宇段过度侵人核心模型,以免破坏核心模型的架构简洁性与可维护性。

  1. 公共处理逻辑下沉及单一

越是底层公用的处理逻辑越应该在数据调度依赖的底层进行封装与实现,不要让公用的处理逻辑暴露给应用层实现,不要让公共逻辑多处同时存在。

  1. 成本与性能平衡

适当的数据冗余可换取查询和刷新性能,不宜过度冗余与数据复
制。

  1. 数据可回滚

处理逻辑不变,在不同时间多次运行数据结果确定不变。

  1. 一致性

具有相同含义的字段在不同表中的命名必须相同,必须使用规范定
义中的名称。

  1. 命名清晰、可理解

表命名需清晰、一致,表名需易于消费者理解和使用。

4. 参考资料

《大数据之路》
《hadoop构建数据仓库》

相关文章