为什么学数据仓库
工作中经常去数据库中找数据做分析,也和数仓同事对接过,做过一些表,但是只是对一些固定的事实和维度表熟悉,对数仓的整体架构、运作流程却没有一个大概的了解。学习数据仓库是为了对数据来源、数据生产方式以及数据呈现方式有一个概览。其一是加深自己对数据的技术层面上的了解,其二是方便之后和数仓同学的沟通。
为什么要有数据仓库
一个技术的出现,必定是为了解决一个需求。数据仓库技术的出现,我认为需求是来自于公司管理层、分析师和业务方,他们想要快速、高效、准确的了解公司的运营数据,以便快速决策和迭代公司运营策略,提升公司的竞争力。有了这个需求点,我们就可以知道为什么不用公司操作型数据库作为数据来源,而专门建设一个数据仓库,以承载企业内部的分析需求。因为操作型数据库不能针对特定主题查看数据,而且当数据比较大的时候,查询速度会比较慢。而且公司的操作型数据库是面向用户的,因为客户的需求是数据快速响应,导致操作型数据库基本上都是是零散且无主题的。
什么是数据仓库
数据仓库之父Inmon对数据仓库的定义是:是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,它用于支持企业或组织的决策分析处理。
- 面向主题:其实就是根据分析需求做的整理,然后加工成一个主题,方便之后的分析。比如说我想看企业订单数据,如果是在操作型数据库上,订单可能来自多个业务,存放在多个表中。数据仓库为了方便分析,就把所有的订单数据全部汇总在一个事实表上面,业务作为一个维度加在表里面,这样我的表就是面向订单的主题,以后我想看数据,就从订单表中取出数据即可,如果要分业务查询,可以加一个限制条件即可。
- 集成的:数据源是有多种的,有的是从数据库,有的手动填写上传的,有的文档资料等等。但是数据仓库一定是把这些数据全部整合完,消除源了数据的一致性。
- 相对稳定的:数据不会有很大的波动。
- 反映历史变化:存放的就是历史数据。
数据仓库的构成
数据仓库系统的体系结构:
数据仓库的术语
- ETL:ETL是Extract(数据抽取)、transformation(数据转换)和load(数据加载)的缩写。ETL贯穿于整个数据仓库。目的是将企业中的多源数据整合到一起。目前数据清洗和抽取,一般都是对Log日志表的清洗,Log日志是根据之前埋点,之后用户触发而上传的日志数据。里面数据字段多、粒度非常细,不方便直接查询,所以需要进行清洗转换,然后加载到一个新的表中。
- 元数据:是关于数据的数据。里面存放着数据所属区域、取值范围、业务规则、甚至ETL规则和数据来源信息。是数据仓库的百科全书。但是经常不被重视,到时许多表在数据仓库中,却不知道如何使用,准确度如何。我经常听到有人抱怨,说有些表谁都不知道它怎么来的,准确性如何,全靠比对,甚至要自己摸索到日志表上面。
- 数据集市:数仓建好后,随着使用数据仓库的部门增多,对数据仓库的资源的竞争也会成为一个难题。各个部门都希望定制数据,所以有了数据集市。相比数据仓库,数据集市主题较少、历史时间较短,更利于查询。
- OLAP:联机分析处理。针对特定的分析主题,设计多种可能的观察形式,设计相应的分析主题结构(即进行事实表和维表的设计),使管理决策人员在多维数据模型的基础上进行快速、稳定和交互性的访问, 并进行各种复杂的分析和预测工作。
数据仓库构建方法
- 业务处理:首先是要和业务方了解业务处理过程,了解底层数据的收集方式以及数据质量。
- 确定粒度:方便理解的话,就是‘数据是要到年?月?日?小时?’
- 确定维度:比如说分业务部门、分城市、分性别之类
- 确定事实:我觉得就是指标,比如说订单表里面,事实就是下单量、下单金额等等。