《七天数据埋点之旅》第一天 初识数仓

2019-08-26 09:56:51 浏览数 (1)

《七天数据仓库之旅》第一天 初识数仓

本文为数据茶水间群友原创,经授权在本公众号发表。

关于作者:我是水大人,资深潜水员,一个基于开发、面向分析、走向全栈的饱经摧残的数据新手,爱折腾不爱玩,爱总结爱思考的老兵,错了改改了又错的惯犯。

0x00 前言

本节是七天数仓之旅的第一篇,本系列的目的在于快速的构建一套最小化可运行的基础数据体系,过程中也会涉及一些数仓的理论知识,但更偏重的是数仓的实现和背后的思考逻辑、所以在开发实施过程中会提供相对多的代码示例和具体的实现细节。

另外需要对数仓的界限做下限制,本系列所讨论的数仓是从数据接入后到数据结果表生成。最后需要指明的是本系列只涉及离线数仓,不涉及实时数仓,有关实时数仓和离线数仓的区别等,请进一步阅读其它资料。

最后,本系列参考了很多前辈在数据仓库建设方面的经验文章,本系列将其纳入到体系中,部分相关的参考会在文中列出,但更多的会集结起来,在问题汇总章节或者以篇外的形式给出,请知悉。

本系列的大纲规划如下(实际执行可能会有调整):

  1. 初识数仓: 什么是数仓、数仓的用途等
  2. 数仓规划: 数仓矩阵、分层分线、分主题设计等
  3. 数仓设计: 数仓模型、事实表(拉链表、累积表)、维表的设计等
  4. 数仓开发: 数仓表初始化和更新方式、任务调度、数据处理的一些思想
  5. 数据计算: 大盘指标(新增、活跃、留存、回流)的计算框架、LTV的计算框架等
  6. 数仓规范: 元数据规范(表命名、存储周期等)、生成规范、调度规范、代码规范
  7. 数仓问题: 数仓相关的技术问题、经验问题和发展问题汇总

通过本系列的学习,首先会对数仓是什么和数仓建设包含哪些内容有基本的认知,并将数仓建设的内容分解成各个模块来讲解。希望你在完成本系列的学习之后,具备快速构建基于用户的互联网产品的数据仓库建设思路和实践方法,需求强调的是,数仓建设虽然有套路和一些模式可遵循,但数据团队的组成不同、业务场景各异、需求也千变万化,数仓建设的成败取决于多种因素,需要根据自身的实际情况因地制宜。

通过本节的阅读,你将获得以下方面的认知:

  1. 什么是数仓
  2. 为什么要建设数仓
  3. 怎样建设数仓

0x01 什么是数仓

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

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

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

数据库

数据仓库

备注

用于记录状态,面向事务

用于分析决策,面向主题

服务业务系统,作为数据源

服务数据分析师等

一般存储最新状态的业务数据

存储历史数据

数据仓库存在部分清除机制,历史数据并不是永久保存

严格遵循范式,避免冗余

为了方便使用故意引入部分冗余

数据量偏小

大数据量

分布式数据库也能存储大量数据

承载体一般为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的人的年龄、性别、职业分布,消费商品的间隔等。这种情况下数据仓库就登场了,其完成数据接入(数据采集之后)、数据清洗和转换、存放策略、数据字典的制定、自动执行的方式等

0x02 为什么要建设数仓

问题

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

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

方案

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

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

问题痛点和解决方案

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

0x03 怎样建设数仓

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

思路

业务监控支持

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

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

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

数据挖掘支持

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

活动分解

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

  • 数仓规划策略

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

  • 数仓模型思想

ER模型、维度模型、DataVault

  • 数仓设计原则

下沉、分区、扩展

  • 数据开发实施

代码、调度

  • 数仓规范建设

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

0xFF 总结

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

参考

  • 数据库和数据仓库的区别
  • 数据仓库和数据集市的区别
  • 《智能运维》
  • 《大数据之路 阿里巴巴大数据实践》
  • 《大数据大创新 阿里巴巴的云上数据中台之道》
  • 《数据仓库数据挖掘实践》数据仓库系列

0 人点赞