sgg快餐项目-3 项目

一、数仓架构

  •  本项目的数据是事务数据,都存储在mysql数据库,如果是其他的项目,那数据可能会在文本、爬虫等。
  • 要使用相关的组件将数据导入到HDFS上。(因为要把数据导入到hive做数据管理、存储和分析,而hive就是在hfds上)。
  • dolphin schedule是定时调度,因为每天都要采集数据并且加载到数仓进行分析,所以开启定时调度。

二、 数仓建模方法论

什么是数据模型?

数据模型就是数据组织和存储的方法,他强调从业务、数据存取和使用角度和你来存储数据。

2.1 ER模型

实体-关系模型。

  • 实体关系模型将复杂的数据抽象为两个概念--实体和关系,实体表示一个对象,例如学生、班级,关系是指两个实体之间的关系,例如学生和班级之间的从属关系。
  • 数据库规范化是使用一系列范式设计数据库(通常是关系型数据库)的过程,其目的是减少数据冗余,增强数据的一致性。

数据库的三个范式:(为了减小数据冗余)

  • 第一范式:每个列都不可以再分。
  • 第二范式: 在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。(这适用于在多个主键的情况下,比如现在有三个主键,那么非主键必须要靠这三个主键才能确定,不能是依靠一个活两个(部分)就确定下来)
  • 第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。

ER模型表比较离散,必须遵循数据库的三大范式。 

2.2 维度模型

维度模型将复杂的业务通过事实和维度两个概念进行呈现,事实通常对应于业务过程,维度对于业务过程发生所处的环境。 

什么是业务过程?下单,收货、退款等,表示动作。

维度模型会存在数据冗余问题 。

其中位于中心的SalesOrder为事实表,其中保存的是下单这个业务过程的所有记录。位于周围每张表都是维度表,包括Date(日期),Customer(顾客),Product(产品),Location(地区)等,这些维度表就组成了每个订单发生时所处的环境,即何人、何时、在何地下单了何种产品。从图中可以看出,模型相对清晰、简洁。

三.各种事实表

事实表概述:事实表作为数仓建模的核心,紧紧围绕着业务过程来设计.

事实表特点:列少,行多.

事实表有三种:事务事实表,周期快照事实表和累计快照事实表.

3.1事务型事实表

        事务型事实表用来记录各业务过程,它保存的是各业务过程的原子操作事件,即最细粒度的操作事件。粒度是指事实表中一行数据所表达的业务细节程度。

原子操作事件:吃饭-->每一次吃饭

        事务型事实表可用于分析与各业务过程相关的各项统计指标,由于其保存了最细粒度的记录,可以提供最大限度的灵活性,可以支持无法预期的各种细节层次的统计需求。

3.1.1事务型事实表设计流程

设计事务事实表时一般可遵循以下四个步骤。

选择业务过程→声明粒度→确认维度→确认事实

  • 选择业务过程

在业务系统中,挑选我们感兴趣的业务过程,业务过程可以概括为一个个不可拆分的行为事件,例如电商交易中的下单,取消订单,付款,退单等,都是业务过程。通常情况下,一个业务过程对应一张事务型事实表。(比如说吃饭,那么这一张表就是吃饭)

  • 声明粒度

业务过程确定后,需要为每个业务过程声明粒度。即精确定义每张事务型事实表的每行数据表示什么,应该尽可能选择最细粒度,以此来应各种细节程度的需求。

典型的粒度声明如下:

订单事实表中一行数据表示的是一个订单中的一个商品项。

  • 确定维度

确定维度具体是指,确定与每张事务型事实表相关的维度有哪些。

确定维度时应尽量多的选择与业务过程相关的环境信息。因为维度的丰富程度就决定了维度模型能够支持的指标丰富程度。

  • 确定事实

此处的“事实”一词,指的是每个业务过程的度量值(通常是可累加的数字类型的值,例如:次数、个数、件数、金额等)

经过上述四个步骤,事务型事实表就基本设计完成了。第一步选择业务过程可以确定有哪些事务型事实表,第二步可以确定每张事务型事实表的每行数据是什么,第三步可以确定每张事务型事实表的维度外键,第四步可以确定每张事务型事实表的度量值字段

3.1.2 事务形事实表的不足

经常涉及到多个事务性事实表join,事务形事实表一般比较大,大表join大表性能较低。

3.2 周期快照事实表

概述:

周期快照事实表以具有规律性的、可预见的时间间隔来记录事实,主要用于分析一些存量型(例如商品库存,账户余额)或者状态型(空气温度,行驶速度)指标。

对于商品库存、账户余额这些存量型指标业务系统中通常就会计算并保存最新结果,所以定期同步一份全量数据到数据仓库,构建周期型快照事实表,就能轻松应对此类统计需求,而无需再对事务型事实表中大量的历史记录进行聚合了。

对于空气温度、行驶速度这些状态型指标,由于它们的值往往是连续的,我们无法捕获其变动的原子事务操作,所以无法使用事务型事实表统计此类需求。而只能定期对其进行采样,构建周期型快照事实表。

3.2.1 周期快照事实表设计流程

  • 确定粒度--采样周期和维度
  • 确认事实--度量

3.3 累积型快照事实表

累积快照事实表是基于一个业务流程中的多个关键业务过程联合处理而构建的事实表,如交易流程中的下单、支付、发货、确认收货业务过程。(这些流程在事务型事实表中都是一个表:下单表、支付表,发货表,确认收货表等等)

该表可以避免多个事务表相连接,使得操作变得高效。(我们现在的表一般都是该表)

3.3.1 设计流程

累积型快照事实表的设计流程同事务型事实表类似,也可采用以下四个步骤,下面重点描述与事务型事实表的不同之处。

选择业务过程→声明粒度→确认维度→确认事实。

  • ​​​​​​​选择业务过程

选择一个业务流程中需要关联分析的多个关键业务过程,多个业务过程对应一张累积型快照事实表。

  • ​​​​​​​声明粒度

精确定义每行数据表示的是什么,尽量选择最小粒度。

  • ​​​​​​​确认维度

选择与各业务过程相关的维度,需要注意的是,每各业务过程均需要一个日期维度。​​​​​​​

  • 确认事实

选择各业务过程的度量值。

四、维度建模理论之维度表

在第三节中介绍了事实表,事实表广义来说就是干什么(下单),那本节介绍的维度表就是谁干?怎么干?在哪干?(谁下单,什么时候下单,在哪下单,下什么单)

4.1 维度表概述

维度表是维度建模的基础和灵魂。前文提到,事实表紧紧围绕业务过程进行设计,而维度表则围绕业务过程所处的环境进行设计。维度表主要包含一个主键和各种维度字段,维度字段称为维度属性。

4.2 维度表设计

4.2.1 设计步骤

  • 确定维度

  1. 在设计事实表的时候,就已经确定好了与每个事实表相关的维度,理论上来说,每个相关的维度均需要对应的一张维度表.
  2. 如果某些维度表的维度属性很少,例如只有一个,则不可创建该维度表,而是把该表的维度属性直接冗余到相关的事实表中,这叫做维度退化.
  • 确定主维表和相关维度表

这里的主维表和相关维表均指业务系统中与某维度相关的表,比如说与日期相关的表:年表,月表,date表,其中在下单事实表中用的是date,那么date为主维表.

其他帖子说明:(此处的主维表一般是 ODS 表,直接与业务系统同步。以淘宝商品维度为例, s_auction_auctions 是与前台商品中心系统同步的商品表,此表即是主维表,其余的是相关维表)

  • 确定维度属性

确定维度属性字段即确定维度表的字段.

维度属性主要来自于业务系统中与该维度对应的主维表和相关维表,维度属性可以直接从主维表或相关维表中选择,也可以通过进一步加工得到.

其他帖子说明:本步骤主要 包括两个阶段,其中第一个阶 段是从主维表 中选择维度属性或生成新的维度属性;第二个阶段是从相 关维表中选择维度属性或生成新的维度属性。以淘宝商品维度为例,从主维表 (s_auction_auctions)和类目、 SPU、卖家、店铺等相关维表中 选择维度属性或生成新 的维度属性。

4.2.2 维度变化

维度属性通常不是静态的,而是会随着时间变化的,数据仓库的一个重要特点就是反映历史数据的变化,所以,如何保存维度历史状态时维度设计的重要工作之一,保存维度数据历史状态,通常有以下两种做法:全量快照表和拉链表.

  • 全量快照表

​​​​​​​离线数仓的计算周期通常为每天一次,所以可以每天保存一份全量的维度数据.这种方式的有点和缺点都很明显.(数据量比较小的时候用)

优点:简单而有效.

缺点:浪费存储空间.

  • 拉链表

拉链表的意义就是在于能够更加高效的保存维度信息的历史状态.

​​​​​​​

拉链表适合数据会发生变化,但是变化频率并不高的维度.(缓慢渐变维)

五 数据仓库搭建流程

5.1 数据仓库的分层规划

本次项目的数仓分层规划:

  • ODS层是原始数据采集过来的,没有做任何变更的操作.
  • DWD是数据明细层,用来放维度模型的事实表(事务型事实表保存着最小细粒度的操作记录),所以这里说它是数据明细层.
  • DIM存放维度表.
  • DWS就是为了放一些汇总的表,便于每次统计.
  • ADS层.

5.2 构建数仓具体流程

自我总结:

  • 明确需要哪些数据,导入进来成为ODS层.
  • 通过维度建模理论来构建事实表和维度表,即构建DIM层和DWD层.
  • 明确哪些指标需要重复使用,构建DWS层.

对于业务总线矩阵,每一行代表一个事务,即每一行都是一个事务型事实表,每一列是对应的维度,即维度表.通过业务总线矩阵可以创建事务型事实表和维度表.

周期快照事实表和其他的表要根据需求创建.

本项目的业务总线矩阵:

DWD和DIM可以参考业务总线矩阵来创建.

5.3 明确统计指标

六 数仓环境准备

5.1 Hive环境搭建

使用Hive on spark配置,hive既存储元数据,又负责Sql的解析优化,语法是HQL语法,执行引擎变成了spark,spark负责采用RDD执行.

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值