hive数仓要点总结

1.OLTP和OLAP区别

OLTP(On-Line Transaction Processing)即联机事务处理,也称为面向交易的处理过程,其基本特征是前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果,是对用户操作快速响应的方式之一,特点是事务操作频繁,数据量小。

OLAP(On-Line AnalyticalProcessing)即联机分析处理,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。这类系统的特点是没有事务性操作,主要是查询操作,数据量大。

|------|--------------|-----------|
| 对比项目 | OLTP | OLAP |
| 功能 | 面向交易的事务处理 | 面向分析查询 |
| 设计 | 面向业务 | 面向主题 |
| 数据 | 最新数据,二维数据 | 历史数据,多维数据 |
| 存储 | M,G ( 存储单位 ) | T、P、E |
| 响应时间 | 快 | 慢 |
| 用户 | 业务操作人员 | 管理决策人员 |

2.什么是数据仓库

数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、数据集成的(Integrated)、相对稳定(非易失)的(Non-Volatile)、反映历史变化(时变)(Time Variant)的数据集合,用于支持管理决策(Decision Making Support)。

3.什么是维度分析

3.1什么是维度

维度就是看问题的角度,给你一个数据表,怎么分析,怎么看就是属于维度范畴

比如2025年的订单数据,怎么分析,可以从时间(月份)分析,商品质量分析,用户分析,这个就是维度

维度分为定性维度和定量维度两种,定性维度就是字符类型的特征,比如区域维度包括全国各省份;定量维度就是数值类型的特征,如价格区间、销量区间等,如价格区间维度分为0--100、100-1000两个区间,可以按价格区间维度来对指标进行分析.

3.2什么是指标

指标就是从维度方向得到的数据进行进一步考量产生的度量值,常见的比如count(),sum(),max()等等.

指标分为绝对数值和相对数值,绝对数值反映具体的大小和多少,如价格、销量、分数等;相对数值反映一定的程度,如及格率、购买率、涨幅等。

综上:维度分析就是针对一个主题,,从不同维度进行统计分析,从而得到各种指标的过程

4.什么是维度分层

通常在分析结果中首先看到的是一个总数,比如全年课程购买量,然后会详细去看每个季度、每个月的课程购买量,全年、季度、月这些属于时间维度的一个层次,年、季度、月是这个层次的三个级别;再比如按地区分析课程购买量,全国、省、市、县属于地区维度的一个层次,层次中共有四个级别。

相当于将维度进行细分。细分两层,则维度包含一个层次,多个级别。 细分三层,则维度包含多个层次,多个级别。

eg:

时间维度:

一个层次四个级别:年、月、天、小时

课程维度:

课程名称:只有一个级别,每门课程的名称

课程分类:两个级别,大类和小类

课程难度:只有三个级别,简单、一般、难

课程等级:只有三个级别,初、中、高

地区维度:

一个层次三个级别:省、市、县

5.什么是下钻,上卷

把获取高级别的汇总信息的过程叫上卷,把获取低级别的明细信息的过程叫下钻,比如:课程访问量分析,时间维度有四个级别,分别是年、月、天、小时,现在我们某个级别分析每天的课程访问量,比如按天分析课程访问量,此时我们可以按小时下钻分析,得出一天内每小时的课程访问量,也可以按月上卷,得到月度的课程访问量。

下钻维度:

天、小时

上卷维度:

年、月

6.什么是数仓建模?建模种类有哪些?

数仓建模简单来讲就是在hive中建表,建表思路和数仓怎么去设计的方案。两种:

三范式建模法:基于减少数据冗余

定义:要求一个数据库表内的每一个数据项都是不可再分割的原子数据项,并确保每一个表只围绕一个主题,且表中的字段都依赖于主键。

  • 优点
    • 减少数据冗余
    • 提高数据一致性:由于数据的更新只需在一个地方进行,然后通过关联关系自动反映到其他相关表中,从而保证了数据的一致性。例如,当员工的部门发生变更时,只需在员工部门信息表中更新一次,其他相关表中的员工部门信息就会通过关联关系自动更新。

维度建模法:基于分析

维度数据模型应用于自下向上的数据仓库架构。简称DM(Dimensional modeling),维度数据模型是一种趋向于支持最终用户对数据仓库进行查询的设计技术,是围绕性能和易理解性构建的。维度模型是按照用户看待或分析数据的角度来组织数据。

维度建模的两个核心概念:事实表和维度表。

7.什么是事实表和维度表?

事实表:

记录了特定事件的数字化信息,一般由数值型数字和指向维度表的外键组成。事实表的设计依赖于业务系统,事实表的数据就是业务系统的指标数据。数据分析的实质就是基于事实表开展的计算操作。

分类:

  1. 事务事实表: 记录的事务层面的事实,保存的是最原子的数据,也称"原子事实表"或"交易事实表"。事务事实表中的数据在事务事件发生后产生,数据的粒度通常是每个事务一条记录。一旦事务被提交,事实表数据被插入,数据就不再进行更改,其更新方式为增量更新。沟通中常说的事实表,大多指的是事务事实表。

  2. 周期快照事实表:(加快查询速率) Periodicsnapshot fact table,周期快照事实表以具有规律性的、可预见的时间间隔来记录事实,时间间隔如每天、每月、每年等等。典型的例子如销售日快照表、库存日快照表等。

    想象以下场景,需要统计一个季度的商品成交量怎么去做?如果用一个季度内的事实事务表进行计算,虽然可以得出结果但是效率太低,在实际生产中并不可行,因此,需要定期对指定的度量进行整合,作为周期快照表用于下游应用。一般设计事实表时,事务事实表和周期快照表是成对设计的,大部分的周期表由事务表加工产生,还有部分特殊数据是直接应用系统产生(如订单评价)。

  3. 累积快照事实表:

    Accumulatingsnapshot fact table,累积快照事实表和周期快照事实表有些相似之处,它们存储的都是事务数据的快照信息。但是它们之间也有着很大的不同,周期快照事实表记录的确定的周期的数据,而累积快照事实表记录的不确定的周期的数据。

    累积快照事实表代表的是完全覆盖一个事务或产品的生命周期的时间跨度,它通常具有多个日期字段,用来记录整个生命周期中的关键时间点。例如订单累计快照事实表会有付款日期,发货日期,收货日期等时间点。

|-------|------------|------------|---------------|
| 特点 | 事务事实 | 周期快照事实 | 累积快照事实 |
| 时间/时期 | 时间 | 时期 | 时间跨度较短的多个时点 |
| 粒度 | 每行代表一个事务事件 | 每行代表一个时间周期 | 每行代表一个业务周期 |
| 事实表加载 | 新增 | 新增 | 新增和修改 |
| 事实表更新 | 不更新 | 不更新 | 新事件产生时更新 |
| 时间维 | 业务日期 | 时期末 | 多个业务过程的完成日期 |
| 事实 | 事务活动 | 时间周期内的绩效 | 限定的多个业务阶段内的绩效 |

维度表:

在进行事实表的统计分析时,用到的外键(其他表的主键),这个其他表就是维度表,维度表不一定存在,而维度一定存在。

分类:

  1. 高基数维度数据:数据量大,而且表数据经常变化,一般是用户资料表、商品资料表类似的表。
  2. 低基数维度数据:数据量小,而且不经常变化一般是配置表,比如枚举值对应的中文含义,或者日期维表、地理维表等。

注:基数指的是一个字段中不同值的个数,比如主键列具有唯一值,所以具有最高的基数,而性别枚举值(日期、地区等)这样的列的基数就很低。

8.有哪些维度建模中建模方法?

1.星型模型:

是一种多维的数据关系。一个事实表为中心,多个维度表环绕周围。一个星型模型中可以有一个或多个事实表,每个事实表可以引用任意数量的维度表。

2.雪花模型:(维护不便,sql分析难度加大)(生产中尽量减少,去优化它们)

当有一个或多个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上时,就像多个雪花连接在一起,故称雪花模型。雪花模型是对星型模型的扩展,它对星型模型的维表进一步层次化,原有的各维表可能被扩展为小的事实表,形成一些局部的 "层次 " 区域,这些被分解的表都连接到主维度表而不是事实表。

模型之间共享,维度一样的可以合成一个

9.什么是渐变维(SCD)

维度可以根据变化剧烈程度主要分为无变化维度和变化维度。例如一个人的相关信息,身份证号、姓名和性别等信息数据属于不变的部分;而婚姻状态、工作经历、工作单位和培训经历等属于可能会变化的字段。

为了减少维度变化带来的分析误差,出现了SCD

分类:

1.SCD1(缓慢渐变类型1)

通过更新维度记录直接覆盖已存在的值。不维护记录的历史。一般用于修改错误的数据,即历史数据就是错误数据,除此没有他用。

总结:将错误数据重写

2.SCD2(缓慢渐变类型2)

在源数据发生变化时,给维度记录建立一个新的"版本"记录,从而维护维度历史。SCD2不删除、不修改已存在的数据。SCD2也叫拉链表。

通过起始时间(valid From)来标识,Valid To(封链时间)为 NULL 的标识当前数据,也可以用2999,3000,9999等等比较大的年份。数仓内部需要保持统一。每个版本都会产生一行新的数据。eg:

总结:形成拉链表维护数据,适用保存历史,会造成冗余

3.SCD3(缓慢渐变类型3)

修改数据时去增加列(修改的字段),弊端为维护麻烦,需次次修改表结构(增加列)

10.为什么要数仓分层?怎么分

为了自己的数据能够有秩序地流转,数据的整个生命周期能够清晰明确被设计者和使用者感知到。

  1. 清晰数据结构:每一个数据分层都有它的作用域和职责,在使用表的时候能更方便地定位和理解。
  2. 复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层解决特定的问题。
  3. 便于维护:当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。
  4. 减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少重复开发的工作量。
  5. 高性能:数据仓库的构建将大大缩短获取信息的时间,数据仓库作为数据的集合,所有的信息都可以从数据仓库直接获取,尤其对于海量数据的关联查询和复杂查询,所以数据仓库分层有利于实现复杂的统计需求,提高数据统计的效率。

分层方法:

  1. 源数据 ODS)

此层数据无任何更改,直接沿用外围系统数据结构和数据,不对外开放;为临时存储层,是接口数据的临时存储区域,为后一步的数据处理做准备。

2.数据 仓库层 DW)

DW 层的数据应该是一致的、准确的、干净的数据,即对源系统数据进行了清洗(去除了杂质)后的数据。

此层可以细分为三层:

明细层DWD(Data Warehouse Detail):存储明细数据,此数据是最细粒度的事实数据。该层一般保持和ODS层一样的数据粒度,并且提供一定的数据质量保证。同时,为了提高数据明细层的易用性,该层会采用一些维度退化手法,将维度退化至事实表中,减少事实表和维表的关联。

中间层DWM(Data WareHouse Middle):存储中间数据,为数据统计需要创建的中间表数据,此数据一般是对多个维度的聚合数据->(周期快照事实表),此层数据通常来源于DWD层的数据。

业务层DWS(Data WareHouse Service):存储宽表数据,此层数据是针对某个业务领域的聚合数据,应用层的数据通常来源与此层,为什么叫宽表,主要是为了应用层的需要在这一层将业务相关的所有数据统一汇集起来进行存储,方便业务层获取。此层数据通常来源与DWD和DWM层的数据。

在实际计算中,如果直接从DWD或者ODS计算出宽表的统计指标,会存在计算量太大并且维度太少的问题,因此一般的做法是,在DWM层先计算出多个小的中间表,然后再拼接成一张DWS的宽表。由于宽和窄的界限不易界定,也可以去掉DWM这一层,只留DWS层,将所有的数据在放在DWS亦可。

3.数据 DA)

前端应用直接读取的数据源;根据报表、专题分析的需求而计算生成的数据。

相关推荐
IT成长日记2 小时前
【HDFS入门】HDFS核心组件JournalNode运行机制剖析:高可用架构的基石
hadoop·hdfs·架构·journalnode
Yvonne9784 小时前
案例:陌陌聊天数据分析
hive·数据分析·finebi
BenBen尔13 小时前
spark的堆外内存,是在jvm内还是操作系统内存内?
大数据·jvm·hadoop·spark
IT成长日记15 小时前
Hadoop文件操作指南:深入解析文件操作
大数据·hadoop·分布式
看海的四叔16 小时前
【SQL】MySql常见的性能优化方式
hive·sql·mysql·性能优化·数据分析·索引优化·sql语法
Yvonne97818 小时前
Apache Hive学习教程
hive·hadoop
IT成长日记1 天前
【Hadoop入门】Hadoop生态之Sqoop简介
大数据·hadoop·sqoop
CDHong.it1 天前
Hadoop大数据平台部署(Hadoop3.2.4+Hive4.0.1)
大数据·hadoop·分布式
chat2tomorrow1 天前
SQL2API是什么?SQL2API与BI为何对数据仓库至关重要?
数据库·数据仓库·低代码·bi·数据中台·sql2api