数仓构建准备

1、数据集市和数据仓库的区别

1、数据集市

通常来说,数仓的构建会从整个企业的业务作为出发点,自上而下的进行构建,但这种方式因为涉及到多部门业务,
难度较大。所以有了数据集市这种思路,即从一个部门或者一条业务线出发开始构建数据集市,数据集市构建完成后
,再将数据集市进行合并形成数仓。

2、两者的区别

1、范围的区别

  • 数据仓库是针对企业整体分析数据的集合。
  • 数据集市是针对部门级别分析的数据集合。

2、数据粒度不同

  • 数据仓库通常包括粒度较细的数据明细。
  • 数据集市则会在数据仓库的基础上进行数据聚合,这些聚合后的数据就会直接用于部门业务分析。

2、指标和维度的区分

  • 1、指标

    • 指标是衡量事务发展的标准,也叫度量。通常可以对其进行计算,如取平均值、求和等
    • 指标分为绝对数值和相对数值,绝对数值反映具体的大小和多少,如价格、大小等。相对数值反映事务发展的程度,如及格率、销售率、涨幅等。
  • 2、维度

    • 维度是事务的特征,如产品的颜色、生产时间、生产区域等。数仓构建中可以针对不同的维度对事务进行分析
    • 维度分为定性维度和定量维度,定性维度就是事务拥有的一些固定的特征,如区域维度包含了全国各省市。而定量维度是数值类型的特征,如价格区间、销量区间等,比如价格区间可以分为100–500、500–1000两个维度,我们可以按照区间维度来对事务进行分析。所以,某些指标是可以转成维度,这些指标转成的维度就是定量维度

3、事实表和维度表

1、事实表

事实表和维度表是维度建模的两个核心
事实表概述:
	事实表的数据是对事务发展的一些数字化的记录,一般由数值型的数据自和维度表的外键组成
	事实表的设计依赖于业务系统,事实表的数据就是业务系统的指标数据,数仓的构建也是围绕事实表数据进行一系列的分析
	事实表分为事务事实表、周期快照事实表、累计快照事实表
  • 1、事务事实表
    • Transaction fact table,事务事实表与周期快照事实表、累积快照事实表使用相同的维度,但是它们在描述业务事实方面是有着非常大的差异的。
      事务事实表记录的事务层面的事实,保存的是最原子的数据,也称“原子事实表”或“交易事实表”。事务事实表中的数据在事务事件发生后产生,数据的粒度通常是每个事务一条记录。一旦事务被提交,事实表数据被插入,数据就不再进行更改,其更新方式为增量更新。
      事务事实表的日期维度记录的是事务发生的日期,它记录的事实是事务活动的内容。用户可以通过事务事实表对事务行为进行特别详细的分析。
      沟通中常说的事实表,大多指的是事务事实表。
  • 2、周期快照事实表
    • Periodicsnapshot fact table,周期快照事实表以具有规律性的、可预见的时间间隔来记录事实,时间间隔如每天、每月、每年等等。典型的例子如销售日快照表、库存日快照表等。
      想象以下场景,需要统计一个季度的商品成交量怎么取做?如果用一个季度内的事实事务表进行计算,虽然可以得出结果但是效率太低,在实际生产中并不可行,因此,需要定期对指定的度量进行整合,作为周期快照表用于下游应用。一般设计事实表时,事务事实表和周期快照表是成对设计的,大部分的周期表由事务表加工产生,还有部分特殊数据是直接应用系统产生(如订单评价)。
      周期快照事实表的粒度是每个时间段一条记录,通常比事务事实表的粒度要粗,是在事务事实表之上建立的聚集表。比如说时间周期是1周,那么这个周期快照事实表的一条记录就是这一周的对于某个度量的统计值。周期快照事实表的维度个数比事务事实表要少。
      周期快照事实表的日期维度通常是记录时间段的终止日,记录的事实是这个时间段内一些聚集事实值。事实表的数据一旦插入即不能更改,其更新方式为增量更新。
  • 3、累计快照事实表
    • Accumulatingsnapshot fact table,累积快照事实表和周期快照事实表有些相似之处,它们存储的都是事务数据的快照信息。但是它们之间也有着很大的不同,周期快照事实表记录的确定的周期的数据,而累积快照事实表记录的不确定的周期的数据。
      累积快照事实表代表的是完全覆盖一个事务或产品的生命周期的时间跨度,它通常具有多个日期字段,用来记录整个生命周期中的关键时间点。例如订单累计快照事实表会有付款日期,发货日期,收货日期等时间点。
      事务事实表中一个完整的交易记录会有一系列不同状态的数据来记录整个交易过程;而累积快照事实表只会有一条记录,数据会一直更新直到过程结束。
      累积快照事实表代表的是完全覆盖一个事务或产品的生命周期的时间跨度,它通常具有多个日期字段,用来记录整个生命周期中的关键时间点。另外,它还会有一个用于指示最后更新日期的附加日期字段。
      由于事实表中许多日期在首次加载时是不知道的,所以必须使用代理关键字来处理未定义的日期,而且这类事实表在数据加载完后,是可以对它进行更新的,来补充随后知道的日期信息。
      举例来说:订货日期、预定交货日期、实际发货日期、实际交货日期、数量、金额、运费。

2、维度表

维度表概述:
	维度是我们分析数据的角度,通常是一个名词,比如商品的销售金额这个事实,我们可以从销售时间、销售产品、销售店铺、购买顾客
	等角度进行分析
	维度表的记录通常比较少,但一条记录可能会包含很多字段
	维度表包含两大类:高基数维度数据和低基数维度数据(基数指的是同一个字段中的不同类型的个数)
  • 1、高基数维度数据:通常是一些用户资料表或者商品资料表这些表,这些表的数据量肯能是千万级的
  • 2、低基数维度数据:通常是一些配置表,如日期维表、地理维表等,数据量可能是个位数或者几万条

4、维度建模的两种模型

  • 1、星型模型
    • 是一种多维的数据关系。一个事实表为中心,多个维度表环绕周围。
    • 一个星型模型中可以有一个或多个事实表,每个事实表可以引用任意数量的维度表。
    • 星型模型将业务流程分为事实和维度。事实是对业务的度量,是定量的数据,比如价格、销售数量、距离、速度、质量等。维度是对事实数据属性的描述,比如日期、产品、客户、地理位置等。
  • 2、雪花模型
    • 当有一个或多个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上时,就像多个雪花连接在一起,故称雪花模型。雪花模型是对星型模型的扩展,它对星型模型的维表进一步层次化,原有的各维表可能被扩展为小的事实表,形成一些局部的 "层次 " 区域,这些被分解的表都连接到主维度表而不是事实表。

5、渐变维

概述:事物的维度可能会随着时间的发展,发生一些改变,所以维度分为无变化维度和变化维度。如个人信息
中的身份证号、性别等信息是不会发生改变的,但身高、年龄、婚姻状况、住址等是会发生变化的。因此,在
设计维度和使用维度的过程中要考虑维度变化带来的影响。

缓慢渐变维:即维度中的属性可能随着时间的发展发生改变,如包含用户住址的DimCustomer维度,这种情况
就会影响业务的精度,所以DimCustomer维度就是缓慢渐变维(SCD)
SCD分为三类:SCD1、SCD2、SCD3
  • 1、SCD1
    • 这种方式对渐变维采用直接覆盖的方式,即发现维度发生变化,直接对维度进行修改,不保留原有的维度。这种方式简单直接,但会导致我们统计的数据产生偏差。所以这种方式用的不多
  • 2、SCD2
    • 这种方式是对维度数据设置一个过期时间,对于有效的、没有发生改变的维度设置一个最大的过期时间,一旦发现维度发生改变,对该维度进行过期处理,同时插入一条新的维度数据。这种方式在数仓构建过程中比较贴合业务,所以使用较多
  • 3、SCD3
    • 这种方式是对维度表中的字段设置多列,一旦发现维度发生变化就多增加一列进行记录,这种方式时间长了以后字段会越来越多,维护起来也比较麻烦,加之SCD1和SCD2已经能够解决渐变维带来的问题,所以基本不用

6、hive的数据存储格式

1、数据格式

行式存储:当查询一条数据的所有字段时,列式存储需要到每个聚集的字段处找到所有的数据,而行式存储
只需要找到其中一个值,其余的值都在附近,所以这种情况使用行式存储查询速度较快

列式存储:每个字段的数据聚集在一个地方进行存储,所以只查询某一个或者某一个字段时,使用这种方式能减
少查询的数据量。因为列式存储的字段都是同一种数据类型,所以也更方便设计压缩方式

1.1、TextFile

默认格式,行式存储,集合GZIP、BZIP2(系统自动检查,查询时会自动解压),使用这种格式,hive不会对数
据进行切割,导致不能对数据进行处理。反序列化过程中,需要逐个字段判断是否是分隔符或者行结束符,性能
较差

1.2、ORCFile

ORCFile是RCFile的升级版,它结合了行式存储和列式存储的优点,数据按照行进行分块,每块使用列式存储。
记录首先会被切分为多个stripes,然后每个stripes以列为单位进行存储,所有列的内容都保存在一个文件中,
ORCFile每个stripes的大小为256MB,相比RCFile的每个stripes4MB来说,更大的stripe可以支持索引,数据读取更加高效

2、压缩方式

2.1、zlib压缩

  • 优点:压缩率比较高;hadoop本身支持,在应用中处理gzip格式的文件就和直接处理文本一样。
  • 缺点:压缩性能一般。

2.2、snappy压缩

  • 优点:高速压缩速度和合理的压缩率。
  • 缺点:压缩率比zlib要低;hadoop本身不支持,需要安装

你可能感兴趣的:(数仓项目,数据仓库)