略讲数仓


先概览下数仓几个重要的相关概念:

  • 数仓是什么:数据管理、存储、计算、建模的方法论,是一种过程处理方法。
  • 数据仓库有什么特点:面向主题的、集成的、稳定的、反映历史变化
  • 数据仓库由什么组成:元数据、数据建模、实现代码、血缘关系、规范准则
  • 数仓在整个数据体系中的位置:数据采集->数据接入->数据仓库->数据报表/数据分析/数据挖掘

为了加深对数仓的认识,我们以普遍熟悉的数据库和数据仓库的对比来看待数仓是什么:

数据库 数据仓库 备注
用于记录状态,面向事务 用于分析决策,面向主题
服务业务系统,作为数据源 服务数据分析师等
一般存储最新状态的业务数据 存储历史数据 数据仓库存在部分清除机制,历史数据并不是永久保存
严格遵循范式,避免冗余 为了方便使用故意引入部分冗余
数据量偏小 大数据量 分布式数据库也能存储大量数据
承载体一般为mysql、oracle等传统的关系型数据库 承载体一般为hive、greenplum等 也有部分使用oracle等传统数据库做数仓的

通过对比,可以发现数据库和数据仓库的本质区别在于传统的数据库是一个存储引擎,而数据仓库是一套数据组织和应用的方法论,是需要很多的支持系统来协助(包含类似数据库这样的存储系统),最后达到支持分析决策的目的。

到此你可能还不明白什么是数仓?那举一个例子:

假设D盘中有一个1M左右的Excel文件F的Sheet1有2000行,每行记录的是深圳市福田区梅林街道用户User1-User10一周的消费记录,包含用户标识、消费时间、消费商铺、消费商品、消费金额、消费数量、消费方式等信息。

需求阶段1:

求User2当月最高消费金额是在那个商铺消费的,对于这个问题你简单地通过排序筛选和计算得到了想要的信息;

需求阶段2:

数据不再是D盘的上的一个文件A,而是深圳市所有用户得到一个月的消费的记录,每个区一个文件夹内有N个以街道名称命名的文件,每个文件内部记录的是该街道用户一个月的消费记录。而此时的数据需求是本月内同时消费过商品1和商品2的人的消费方式分布,或许此时你通过较强的Excel技能或者将数据转存到Oracle等关系数据库中借助SQL最后也完成了需求。

需求阶段3:

数据急剧扩展,线上消费数据存储在各自的手机上,线下消费数据存储在每个人的账簿本上,且每天的记录都在递增。此时需求也变得异常复杂,比如增量计算每天首次消费商品1的人的年龄、性别、职业分布,消费商品的间隔等。这种情况下数据仓库就登场了,其完成数据接入(数据采集之后)、数据清洗和转换、存放策略、数据字典的制定、自动执行的方式等

二、为什么要建设数仓

无数仓或者数仓建设得不好常见的问题:

  1. 数据资产模糊
  • 不知道有什么数据、该找谁要数据
  • 数据如何生成和更新的
  • 数据存储和计算资源评估缺乏必要的信息
  1. 数据质量低
  • 字段命名不规范、口径不一致
  • 条件的过滤和规则等的理解差异带来的算法不一致
  1. 重复建设
  • 无中间表或中间表建设的差,每次从原始数据取,数据开发周期长
  • 代码臃肿
  • 最底层取数据,带来存储和计算资源的浪费,同时滋生数据口径不一致问题
  1. 底层轻微的改变对上层影响巨大
  • 业务数据轻微改动
  • 底层逻辑轻微改动
  • 底层数据异常
  1. 问题定位难,周期长
  • 上下游依赖混乱
  • 任务上线容易,下线难,生命周期难以管理
  • 复杂问题耦合在一起
  1. 频繁的临时性需求
  2. 多维度拆解:OLAP、培养提高需求提出人的能力
  3. 同质类似的小需求:即席查询、固化、详细自查、模板、培养提高需求提出人的能力

方案

建设数仓可以带来以下的好处:

  1. 方便沟通交流
  2. 提高排查问题的效率
  3. 提高数据开发的效率
  • 代码复用、表复用等
  • 复杂任务解耦(分散到各层或层内的不同表上)
  1. 提高数据质量,避免数据口径不一致等问题
  2. 减少存储成本和计算成本

问题痛点和解决方案

需要注意的是,虽然数仓建设能带来诸多的益处,但其是一个庞大复杂耗时的工程,需要一些支持系统的配合,比如说元数据管理系统、调度系统等,而且也并不是所有的业务一开始都要建设数仓,要根据业务发展所处的状态和未来的发展趋势以及分析决策的复杂性等综合评判。
虽然数仓可以不做,但是要做的话一定要提前规划和基本的规范制定,自由散漫野性生长的数仓有不如无。

三、怎样建设数仓

数仓建设的本质目的是支撑分析决策,那分析决策依赖什么样的数据,数仓建设是如何保障这些数据高效正确产出的。面向业务数据指标建设数仓,同时兼顾其它可能的扩展情况,是数仓建设的整体思路。
数仓对上层数据应用的支持主要体现在三个方面:业务监控数据(大盘数据洞察)、数据挖掘(用户画像、推荐等)、数据分析(业务诊断、提升优化等)。其中按支持的优先级来分,首先就是业务监控数据,然后是数据分析、再然后数据挖掘。这也是数据应用由浅到深的递进。

思路

业务监控支持

业务监控支持是数仓建设的主要也是最基础的服务对象。首先梳理业务,划分出业务主题,然后梳理指标体系,自顶向下的建设,主要体现在以下方面:

  • 对指标体系进行分类,根据指标分类来建设数据主题集市
  • 对维度进行抽象,根据抽象出的维度来建设维表,然后根据维表的生成方式配置调度策略、是线下录入还是线上生成,更新机制是日定时更新还是触发更新,以及维度的变化情况等

数据分析支持

业务监控搭建起来了数据体系的基本框架,然而还是框架外的灵活数据分析需求,比如OLAP多维分析、交叉分析等,从这个角度来讲,数仓建设的中间表的维度一定要足够丰富,模型的选择上为了兼顾使用的方便性,一般以星型模型为主,同时尽可能的采用维度退化的方式,另外单主题多行为阶段的漏斗宽表和多主题多行为的宽表也能为数据分析提供极大的便利。

数据挖掘支持

数据挖掘支持是在数据分析的基础上对用户行为宽表的要求更进步强化了,同时要兼顾维度的丰富性。

活动分解

数据仓库设计的具体流程,从业务需求分析、逻辑设计、物理设计、数仓的初始化方法以及更新方法
从数仓的组成上来分以下几个模块进行数仓的建设:

  • 数仓规划策略

分层、分线、分主题(数据集市)

  • 数仓模型思想

ER模型、维度模型、DataVault

  • 数仓设计原则

下沉、分区、扩展

  • 数据开发实施

代码、调度

  • 数仓规范建设

表命名规范、字段命名、代码开发规范、任务调度规范

后记

本节从三个基本问题角度介绍了数仓,简单描述了数仓是什么、数仓建设的好处、数仓建设思路和活动等几个方面。总结来说,数仓建设是面向分析决策的、是数据组织和管理的方法论、是由很多的支持系统协作的。