数据仓库基础
目录
为什么要数据仓库?
通常数据仓库的数据来自各个业务应用系统。
为了整合所有的结构化数据、半结构化数据、非结构化数据搭建的数据系统(数仓),我们不能直接在业务系统上进行开发数据仓库,因为业务系统(MySQL)的数据量级比较小,同时它只能处理结构化数据,不太适合进行一些报表输出以及即席查询等
数据仓库里的数据作为分析源,提供给后面的即席查询、分析系统、数据集市、报表系统、数据挖掘系统等。
不能直接访问业务系统的数据:
- 某些数据因为安全或其他因素不能直接访问;
- 业务系统版本更新频繁,每次变更都需要重写分析系统并重新测试;
- 很难建立和维护汇总数据来源于多个业务系统版本的报表;
- 业务系统的列名通常是硬编码,有时仅仅是无意义的字符串,让编写分析系统更加困难;
- 业务系统的数据格式,如日期、数字的格式不统一;
- 业务系统的表结构为事务处理性能而优化,有时并不适合查询与分析;
- 没有适当的方式将有价值的数据合并进特定应用的数据库;
- 没有适当的位置存储元数据;
- 用户要看到的显示数据字段,有时在数据库中并不存在;
- 通常事务的优先级比分析系统高,所以如果分析系统和事务处理运行在同一硬件之上,分析系统往往性能很差;
- 有误用业务数据的风险;
- 极有可能影响业务系统的性能。
尽管需要增加软硬件的投入,但建立独立数据仓库与直接访问业务数据相比,无论是成本还是带来的好处,这样做都是值得的。
数据仓库概念
Data Warehouse,简写:DW或者DWH。DW的目的是构建面向分析的集成化数据环境,为企业提供决策支持。它出于分析性报告和决策支持目的而创建。
DW本身不产生数据,数据来源:
业务数据:(一切与钱相关的数据)App或网站上的各种购买下单支付注册等关键信息数据,保存到业务系统中(MySQL)
日志数据(事件数据):用户浏览网站进行各种点击、浏览、评论、点赞等事件行为产生的数据,也叫用户行为日志。
第三方数据(日志数据):类似于合作公司的数据,相当于把数据接口对接到合作公司,通过合作公司提供的第三方数据,同时也可以通过一些公共网站爬取数据(外部数据)
数仓特性
数仓是面向主题的、集成的、非易失的、时变的数据集合,用于支持管理决策。
- 面向主题
数据综合、归类并进行分析利用的抽象。逻辑上,它是对应企业中某一宏观分析领域所涉及的分析对象。
- 集成性
通过对分散、独立、异构的数据库数据进行抽取、清理、转换和汇总便得到了数据仓库的数据,保证了数据仓库内数据关于整个企业的一致性。
数据进入数据库之前,要经过统一和综合,需要完成的工作有:
1)统一源数据中所有矛盾之处,如字段的同名异义、异名同义、单位不统一、字长不一致,等等。
2)进行数据综合和计算。数据仓库中的数据综合工作可以在从原有数据库抽取数据时生成,但许多是在数据仓库内部生成,即进入数据仓库以后进行综合生成。
- 非易失性
数据仓库的数据反映是一段相当长的时间内历史数据的内容。数据经加工和集成进入数据仓库后极少更新,通常只需要定期的加载和更新。
- 时变性
周期性,反映历史信息变化。虽然数据仓库的用户不修改数据,但并不是说数据仓库的数据是永远不变的。
数据仓库的数据随时间的变化表现在以下几个方面:
1)数据仓库中的数据时限一般要远远长于操作型数据的数据时限;
2)操作型系统存储的是当前数据,而数据仓库中的数据是历史数据;
3)数据仓库中的数据是按照时间顺序追加的,它们都带有时间属性。
数仓架构
数仓架构可以理解为数仓的组件及其之间的关系。
数据仓库环境包括:操作型系统、数仓系统。操作型系统的数据由各种形式的业务数据组成,数据经过抽取、转换和装载(ETL)过程进入数仓系统。
主要的架构方法:数据集市架构、Inmon企业信息工厂架构、kimball数据仓库架构、混合型数据仓库架构。
数据集市架构(了解)
两种类型的数据集市:独立数据集市、从属数据集市
Inmon企业工厂架构***
适合大型企业级构建的数据仓库系统,需要遵循三范式原则,也就是需要前提准备所有的规范说明,所有的原则等,开发周期长,消耗的人力物力比较大,优点在于维护简单。
企业级数据仓库:核心组件。
部门级数据集市:面向主题数据的部门级视图,数据从企业级数据仓库获取。
Kimball数据仓库架构***
遵循维度建模方案,随取随用比较直接,数仓成型快,短平快,后期升级维护比较麻烦
混合型数据仓库架构(了解)
联合使用Inmon和kimball两种架构。
数仓分层架构
按照数据流入流出过程,数仓架构可分为:源数据、数据仓库、数据应用
源数据:此层数据无任何更改,为临时存储层,为后一步的数据处理做准备。
数据仓库:细节层,DW层的数据应该是一致的、准确的,干净的数据。
数据应用:前端应用直接读取的数据源;根据报表、专题分析需而计算生成的数据。
数仓获取、转换、流动数据都可以认为是ETL(抽取Extra、转换Transfer、装载Load)的过程。
为什么要数据仓库进行分层?
用空间换时间,通过大量预处理提升效率,数仓产生大量冗余数据;不分层,将会影响整个数据清洗过程,工作量巨大。
简化数据清洗过程,把一个复杂的工作拆分成多个简单的工作。
数仓常见术语解析
实体表、事实表、维度表之间的关系:实体、维度
实体
实体的存在是为了业务分析,作为分析的一个筛选维度,拥有描述自己的属性,本身具有可分析的价值。
维度
看待问题的角度
度量
业务流程节点上的一个数值。比如销量、价格、成本等等。
事实表中的度量可分为三类:完全可加、半可加、不可加
粒度
粒度就是业务流程中对度量的单位:度量、粒度
选择合适的粒度级别是数仓建设好坏的重要关键内容,因素:
数据粒度划分策略一定要保证:数据的粒度确实能够满足用户的决策分析需要,这是数据粒度划分策略中最重要的一个准则。
口径
取数逻辑,取数的条件
指标
指标是口径的衡量值,也就是最后的结果。
指标分类:
- 原子指标
- 派生指标
- 衍生指标
标签
人为设定,根据业务场景需求,对目标对象运用一定的算法得到的高度精练的特征标识。
自然键
由现实中已存在的属性组成的键,业务概念中是唯一的,并具有一定的业务含义
代理键
不具有业务含义的键,代理键的作用仅仅是连接维度表和事实表。
持久键
保持永久性不会发生变化。
自然键与持久键的区别:举个例子就明白了,比如说公司员工离职之后又重新入职,他的自然键也就是员工编号发生了变化,但是他的持久键身份证号是不变的。
退化维度
看起来像是事实表的一个维度关键字,实际上并没有对应的维度表。
维度分析:上卷、下钻
下钻:由粗粒度到细粒度来观察数据
上卷:由细粒度到粗粒度,可以理解为删掉维的某些层
维度立方体
包含了下钻、上卷的所有操作,站在多个维度角度去看待事情,出现不同的结果;缺点:结果过多,导致程序运行速度大大降低。
数据集市
Data Mart,从数据仓库中抽取出来的一个小集合。
数仓名词之间的关系
实体表、事实表、维度表之间的关系
维度表:用户用来分析一个事实的窗口,里面的数据是对事实的各个方面的描述。
事实表:通过各种维度和一些指标值的组合来确定一个事实。
实体表:实际对象的表,存放客观存在的事物数据。
指标与标签区别
-
概念不同
-
构成不同:
指标名称是对事物质与量两方面特点的命名;标签名称通常是形容词或形容词+名词的结构;
- 分类不同
指标分类:
按计算逻辑:原子、派生、衍生
按对事件描述内容的不同:过程性指标和结果性指标
标签分类:
按变化:静态标签和动态标签
按指代和评估指标的不同:定性标签和定量标签
指标最擅长的是应用于监测、分析、评价和建模。
标签最擅长的是应用是标注、刻画、分类和特征提取
维度与指标区别于联系
维度:数据的观察角度
指标:从维度的基础上去衡量这个结果的值
维度一般是一个离散的值
指标即聚合运算的结果,一般是一个连续的值。
自然键与代理键在数仓的使用区别
数仓工具箱中说维度表的唯一主键应该是代理键而不应该是自然键。数据仓库中维度表与事实表的每一个连接应该基于无实际含义的整数代理键。避免使用自然键作为维度表的主键。
数据集市和数据仓库的关系
数据集市是数据仓库的子集。数据集市与数仓的主要区别:数仓是企业级的,数据集市是部门级的。
数据仓库与数据库的区别
实际是OLTP与OLAP的区别
数据库:操作型处理,联机事务处理OLTP,面向交易的处理系统,针对具体业务在数据库联机的日常操作,对少数记录进行查询、修改。
数仓:分析型处理,联机分析处理OLAP,针对某些主题的历史数据进行分析,支持管理决策。
数据库是为捕获数据而设计,数仓是为分析数据而设计。
总体来说,数据库和数据仓库不是一个系统,一个做数据添加修改等操作,一个制只做查询操作。