做数仓做久了,真感觉越来越向数据产品经理的方向发展了。数据产品经理是近年来随着大数据的发展蹦出来的一个岗位,很多人搞不懂数据分析师、数据产品经理、数据仓库开发工程师、ETL工程师到底是什么岗位?下周吧,总结一篇。这周先写写数仓的东西,感觉自己真应该总结下过往经验输出一下了。
一、什么是数据仓库?
数据仓库是为了方便企业快速做各种业务决策提供数据支撑而构建的集成化数据环境。有一句话很好的体现了数据仓库的这一特点,数据仓库本身并不 ‘生产’ 任何数据,同时自身也不需要 ‘消费’ 任何数据,数据来源于外部,同时开放给外部使用,这也是为什么叫 ‘仓库’ ,而不是叫 ‘加工厂’ 的原因。
二、数据仓库主要有以下三个特点:
1. 数据仓库是面向主题的,它会按照一定的主题进行组织。主题是指业务方使用数据仓库决策时所关心的重点方向,一般会根据业务线情况划分。
2. 数据仓库是集成的,数据仓库中的数据可能来源于多个数据源,数据仓库会将需要的数据从中抽取出来,然后进一步转化、清洗,再集成到数据仓库中。
3. 数据仓库是不可更新的,数据仓库主要是为业务提供分析决策的数据,因此,对数据的主要操作都是查询。
三、数据仓库需要满足的要求:
数据仓库的数据要为业务提供快速高效的分析,因此有些要求是必须要满足的。
1. 效率足够高。数据仓库的分析数据一般为日、周、月、季、年等,可以看出,以日为周期的数据要求的效率最高。
2. 数据质量。数据仓库处理流程通常分为多个步骤,包括数据清洗、转换、装载等。如果数据质量控制不好,导致出现脏数据,就会影响整个的数据仓库的质量,如果基于错误的数据做分析,就可能导致做出错误的决策。
3. 可扩展性。可扩展性主要体现在数据建模的合理性,便于以后因为业务规模发生变化而不用重复造轮子,这也就是目前我的工作,对接业务然后建模。
四、数据仓库分层
由于数据仓库处理的数据层次不同,数据仓库主要分为原始层、基础层、主题层、数据集市这三层。
1. 原始层(ODS)
ODS层全成为Operational Data Store,翻译成中文就是操作型数据存储,是面向主题的、集成的、可变的、反映当前数据值的、详细的数据的集合,用来满足企业综合的、集成的和操作型的处理需求。
对于ODS层,客户端用户的操作日志是一个主要的数据来源,它是分析App和产品优化的基础;另一部分来源于业务的数据库,例如订单的交易情况。ODS层的表通常包括两类,一类用于存储当前需要加载的数据,另一类用于存储处理完后的历史数据。历史数据一般保存3~6个月后需要清除,以节省空间。但不同的项目要区别对待,如果源系统的数据量不大,可以保留更长的时间,甚至全量保存。
ODS层是当前的、不断变化的数据,而数据仓库保留的是历史、不再变化的数据,所以一般来说会落后ODS层一天或者一天以上的数据。ODS层按分钟级别捕捉生产系统的数据变化,然后可以每天将归档后的数据加载到数据仓库中,归档的标记为这条记录是否已完成。
那么,为什么需要ODS层呢?一般在带有ODS层的系统体系结构中,ODS层具备以下几个作用:
(1) 在业务系统和数据仓库之间形成一个隔离层。
一般的数据仓库应用系统都具有非常复杂的数据来源,这些数据存放在不同的地理位置、不同的数据库、不同的应用之中,从这些业务系统中对数据进行抽取并不是一件容易的事。因此,ODS层用于存放业务系统中直接抽取出来的数据,这些数据从数据结构、数据之间的逻辑关系都与业务系统基本保持一致,因此在抽取过程中极大降低了数据转化的复杂性,而主要关注数据抽取的接口、数据量的大小、抽取方式等方面的问题。
(2) 转移一部分业务系统细节查询的功能。
简单讲,数据仓库还未搭建,大量的报表、分析是由业务系统直接支持的,而在一些比较复杂的报表生成过程中,对业务系统的运行产生了相当大的压力。ODS层的数据在粒度、组织方式等方面都保持了与业务的一致,那么原来由业务系统产生的报表、详细数据的查询自然能够从ODS层中进行,从而降低了业务系统的查询压力。
(3) 完成数据仓库中不可能完成的一些功能。
一般来讲,在带有ODS层的数据仓库体系结构中,数据仓库所存储的数据都是汇总过的数据和运营指标,并不存储每笔交易产生的详细数据,但是在某些特殊的应用中,可能需要对交易详细数据进行查询,例如,跟踪埋点错误的问题,这时就需要把详细数据查询的功能转移到ODS层完成,而且ODS层的数据模型按照面向主题的方式存储,可以方便地支持多维分析等查询功能。即数据仓库从宏观角度满足企业的决策支持要求,而ODS层则从微观角度反映细节交易数据或者低粒度的数据查询要求。
2. 基础层(DWD)
基础层的主要作用是对ODS层的数据进行轻量汇总,产出轻度汇总明细、维度表、码表、事实表等一系列基础数据。
这里通过建模的方式,对数据进行多个模型的处理,数据模型是抽象描述现实世界的一种工具和方法。首先,生成业务模型,主要解决业务方面的分层,然后完成领域模型,基于业务模型的基础进行抽象处理。接着,将领域模型的实体与实体的关系进行数据库层次的逻辑化,也就是所谓的逻辑建模。最后,生成物理模型,用来完成对不同关系型数据库的物理化以及性能等具体技术问题。数据模型的层次依次为:业务模型,概念模型,逻辑模型,物理模型。
因此,在整个数据仓库的基础层模型设计中,要在了解业务的基础上,掌握过硬的技术,能够构建一个既合理又高效的模型,需要相当丰富的行业经验。如果你的岗位是数据产品经理,在这方面只需略知皮毛,至于如何针对业务进行抽象、处理、生成 各个阶段的模型,还是交给更专业的数据仓库工程师。
3. 主题层(DWS)
主题层为数据的高度聚合,按照一定的维度和业务逻辑,对一类数据进行聚合,主要生成画像表和主题表。主题层的数据来源是基础层和原始层,或者叫DWS层和ODS层。
数据模型的建设、维度的选择是为了满足数据主题的需求,这层数据是面向主题组织数据的。从数据粒度来说,这层的数据是轻度汇总级的数据,已经不存在明细数据了。从数据的时间跨度来说,主题层通常是基础层的一部分,主要的目的是满足用户分析某个主题的需求。从分析的角度来看,用户通常只需要分析近三年的数据即可。从数据的广度来说,主题层仍然覆盖了所有的业务数据。
例如,在共享单车的数据仓库设计中,通常根据业务将主题层分为用户主题、车辆主题、支付主题、行程主题等,为了平衡业务前台的快速变化与数据仓库稳定性的需求,在设计主题层的时候,通常要与业务中台保持一致。
4. 数据集市(DM)
数据集市也叫数据市场,主要功能是将主题层和基础层的数据按各业务需求进行聚合,生成宽表和Cube,并直接推送给数据分析和业务部门使用,例如直接推送表数据到MySQL数据库。数据集市由很多非常宽的表组成,比如GMV(网站成交金额)的表,除了包含订单和金额等必须的字段,还包含可能使用的SKU(库存量单位)产品信息、用户基本信息等,是数据仓库的核心组成部分。
数据集市是数据仓库的一部分,主要面向各业务部门使用,并且仅面向某个特定的主题。为了解决灵活性和性能之间的矛盾,数据集市可以被理解一种小型的主题或业务级别的数据仓库。数据集市会根据业务的主题情况,存储为特定用户预先计算好的数据,从而满足性能方面的要求。因此,数据集市可以在一定程度上缓解访问的速率瓶颈。
数据集市会根据不同的业务主题划分来满足业务信息需求,一个合格的数据集市应该满足如下特点:
(1) 数据集市是为了解决特定业务需求的,更具有面向主题性。
(2) 在更多情况下,数据集市支持离线数据,在一般情况下,业务经常使用的是T+1数据,即今天看昨天的数据。
(3) 数据来源于多个方面,比如业务订单数据、前端用户使用使用数据以及外部来源数据等。
(4) 查询时间尽量短,为分析和查询尽快响应。
那如何设计数据集市呢?这就是数据仓库工程师的任务。更多的就是集市表设计时要遵循的规范,表名的命名,字段名称的规范化,适当处理低频更新的表,如何处理每个表的元数据信息等等,这些改天再聊。
数据集市是数据仓库的核心部分,正是因为它的存在,数据准确性和取数效率有了很大的提升。
(1) 提升数据的准确性。 因为在建立面向主题的数据表之后,不用再根据不同的需求建立不同的表,所以发生错误的概率会大大降低。
(2) 提升取数效率。因为面向主题,所以需要的任何数据都可以从数据集市层的表中直接简单获取。