本文为数据茶水间群友原创,经授权在本公众号发表。
关于作者:我是水大人,资深潜水员,一个基于开发、面向分析、走向全栈的饱经摧残的数据新手,爱折腾不爱玩,爱总结爱思考的老兵,错了改改了又错的惯犯。
本节是七天数仓之旅的第一篇,本系列的目的在于快速的构建一套最小化可运行的基础数据体系,过程中也会涉及一些数仓的理论知识,但更偏重的是数仓的实现和背后的思考逻辑、所以在开发实施过程中会提供相对多的代码示例和具体的实现细节。
另外需要对数仓的界限做下限制,本系列所讨论的数仓是从数据接入后到数据结果表生成。最后需要指明的是本系列只涉及离线数仓,不涉及实时数仓,有关实时数仓和离线数仓的区别等,请进一步阅读其它资料。
最后,本系列参考了很多前辈在数据仓库建设方面的经验文章,本系列将其纳入到体系中,部分相关的参考会在文中列出,但更多的会集结起来,在问题汇总章节或者以篇外的形式给出,请知悉。
本系列的大纲规划如下(实际执行可能会有调整):
通过本系列的学习,首先会对数仓是什么和数仓建设包含哪些内容有基本的认知,并将数仓建设的内容分解成各个模块来讲解。希望你在完成本系列的学习之后,具备快速构建基于用户的互联网产品的数据仓库建设思路和实践方法,需求强调的是,数仓建设虽然有套路和一些模式可遵循,但数据团队的组成不同、业务场景各异、需求也千变万化,数仓建设的成败取决于多种因素,需要根据自身的实际情况因地制宜。
通过本节的阅读,你将获得以下方面的认知:
先概览下数仓几个重要的相关概念:
为了加深对数仓的认识,我们以普遍熟悉的数据库和数据仓库的对比来看待什么是数仓:
数据库 | 数据仓库 | 备注 |
---|---|---|
用于记录状态,面向事务 | 用于分析决策,面向主题 | |
服务业务系统,作为数据源 | 服务数据分析师等 | |
一般存储最新状态的业务数据 | 存储历史数据 | 数据仓库存在部分清除机制,历史数据并不是永久保存 |
严格遵循范式,避免冗余 | 为了方便使用故意引入部分冗余 | |
数据量偏小 | 大数据量 | 分布式数据库也能存储大量数据 |
承载体一般为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的人的年龄、性别、职业分布,消费商品的间隔等。这种情况下数据仓库就登场了,其完成数据接入(数据采集之后)、数据清洗和转换、存放策略、数据字典的制定、自动执行的方式等
无数仓或者数仓建设得不好常见的问题:
建设数仓可以带来以下的好处:
问题痛点和解决方案
需要注意的是,虽然数仓建设能带来诸多的益处,但其是一个庞大复杂耗时的工程,需要一些支持系统的配合,比如说元数据管理系统、调度系统等,而且也并不是所有的业务一开始都要建设数仓,要根据业务发展所处的状态和未来的发展趋势以及分析决策的复杂性等综合评判。 虽然数仓可以不做,但是要做的话一定要提前规划和基本的规范制定,自由散漫野性生长的数仓有不如无。
数仓建设的本质目的是支撑分析决策,那分析决策依赖什么样的数据,数仓建设是如何保障这些数据高效正确产出的。面向业务数据指标建设数仓,同时兼顾其它可能的扩展情况,是数仓建设的整体思路。 数仓对上层数据应用的支持主要体现在三个方面:业务监控数据(大盘数据洞察)、数据挖掘(用户画像、推荐等)、数据分析(业务诊断、提升优化等)。其中按支持的优先级来分,首先就是业务监控数据,然后是数据分析、再然后数据挖掘。这也是数据应用由浅到深的递进。
业务监控支持是数仓建设的主要也是最基础的服务对象。首先梳理业务,划分出业务主题,然后梳理指标体系,自顶向下的建设,主要体现在以下方面:
业务监控搭建起来了数据体系的基本框架,然而还是框架外的灵活数据分析需求,比如OLAP多维分析、交叉分析等,从这个角度来讲,数仓建设的中间表的维度一定要足够丰富,模型的选择上为了兼顾使用的方便性,一般以星型模型为主,同时尽可能的采用维度退化的方式,另外单主题多行为阶段的漏斗宽表和多主题多行为的宽表也能为数据分析提供极大的便利。
数据挖掘支持是在数据分析的基础上对用户行为宽表的要求更进步强化了,同时要兼顾维度的丰富性。
数据仓库设计的具体流程,从业务需求分析、逻辑设计、物理设计、数仓的初始化方法以及更新方法 从数仓的组成上来分以下几个模块进行数仓的建设:
分层、分线、分主题(数据集市)
ER模型、维度模型、DataVault
下沉、分区、扩展
代码、调度
表命名规范、字段命名、代码开发规范、任务调度规范
本节从三个基本问题角度介绍了数仓,简单描述了什么是数仓、数仓建设的好处、数仓建设思路和活动等几个方面。总结来说,数仓建设是面向分析决策的、是数据组织和管理的方法论、是由很多的支持系统协作的。
参考