导图社区 数据仓库-基础
小白必看《数据仓库-基础》,包括:数据仓库系统架构、维度分析、数仓建模、数据仓库、分层数据、仓库设计案例、Sqoop 数仓工具、数据仓库介绍。注释内含大量解释,无他唯手熟尔!
编辑于2021-11-10 21:31:06数据仓库 Data Warehouse
数据仓库系统架构
数据仓库分层架构
分3层
源数据层(ODS)
此层数据无任何更改,直接沿用外围数据,是临时储存层
数据仓库层(DW)
也称为细节层,清洗后的一致、准确、干净的数据
数据应用层(DA 或 APP)
前端直接读取的数据源,用于生成报表
ETL (Extra, Transfer, Load)
数据仓库从各数据源获取数据及在数据仓库内的数据转换和流动都可以认为是 ETL 包括数据抽取、数据转换、数据装载三个过程
ETL 三过程
抽取 Extra
数据抽取是从各各业务系统、外部系统等源数据处采集源数据
转换 Transfer
采集过来的源数据如果要存储到数据仓库需要按照一定的数据格式对源数据进行转换,常见的转换方式有数据类型转换、格式转换、缺失值补充、数据综合等
装载 Load
转换后的数据就可以存储到数据仓库中,这个过程要装载。数据装载通常是按一定的频率进行的,比如每天装载当天的订单数据、每星期装载客户信息等
数据仓库 与 数据集市 的区别
数据仓库是用于企业整体分析的数据集合,比如分为:销售主题、客户主题、产品主题等。而数据集市是用于部门分析的数据集合
维度分析
指标
【概述】指标是衡量事务发展的标准,也叫度量,如价格,销量等;可以进行聚合计算。
指标分类
绝对数字:如价格、销量、分数等
相对数字:如及格率、购买率、涨幅等
维度
【概述】维度是事务的特征,如颜色、区域、时间等,可以根据不同的维度来对指标进行分析对比。
维度分类
定性维度:如省份、性别等
定量维度:价格区间、销售区间等
维度分层与分级
如:年 -> 月 ->日 -> 时,省 -> 市 -> 区
下钻与上卷
在维度分层进行迁越
数仓建模
概述
三范式建模法
自顶而下,传统的企业级数据仓库
维度建模法
自下而上,基于维度分析创建模型
事实表
【概述】事实表记录了特定事件的数字化信息,一般由数值型数字和指向维度表的外键组成
事实表分类
事务事实表
事务事实表记录的事务层面的事实,保存的是最原子的数据,也称“原子事实表”或“交易事实表”。
周期快照事实表
周期快照事实表以具有规律性的、可预见的时间间隔来记录事实,时间间隔如每天、每月、每年等等。典型的例子如销售日快照表、库存日快照表等。
累积快照事实表
累积快照事实表代表的是完全覆盖一个事务或产品的生命周期的时间跨度,它通常具有多个日期字段,用来记录整个生命周期中的关键时间点。例如订单累计快照事实表会有付款日期,发货日期,收货日期等时间点。
维度表
【概述】维度是指观察数据的角度,一般是一个名词,比如对于销售金额这个事实,我们可以从销售时间、销售产品、销售店铺、购买顾客等多个维度来观察分析。
维度表分类
高基数维度数据
如:用户资料表、商品资料表
低基数维度数据
如:国家表、日期表
建模方法
星型模型

一个事实表为中心,多个维度表环绕周围 一个星型模型中可以有一个或多个事实表,每个事实表可以引用任意数量的维度表
雪花模型

当有一个或多个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上时,就像多个雪花连接在一起,故称雪花模型。
渐变维
变化程度
无变化维度
如:身份证号
变化维度
如:工作单位
渐变维分类
SCD1(缓慢渐变类型1)
通过更新维度记录直接覆盖已存在的值。不维护记录的历史。一般用于修改错误的数据,即历史数据就是错误数据,除此没有他用。
SCD2(缓慢渐变类型2)
在源数据发生变化时,给维度记录建立一个新的“版本”记录,从而维护维度历史。SCD2不删除、不修改已存在的数据。SCD2也叫拉链表。
SCD3(缓慢渐变类型3)
实际上SCD1 and 2 可以满足大多数需求了,但是仍然有其它的解决方案,比如说 SCD3。 SCD3希望只维护更少的历史记录。
数据仓库分层

源数据层 ODS
直接沿用外围系统数据结构和数据,为临时存储层
数据仓库层 DW
明细层 DWD
降维,取所需数据,进行清洗保证数据有效性
中间层 DWM
提前局部聚合,降低最后聚合成DWS宽表的工作量(可忽略)
业务层 DWS
聚合成宽表
数据应用层 DA / APP
前端应用直接读取的数据源;根据报表、专题分析的需求而计算生成的数据
维表层 DIM
高基数维度表
低基数维度表
数据仓库设计案例
Sqoop 数仓工具
Sqoop 概述
用于将Hadoop的 HDFS数据 与各种关系型数据库(MySQL,Oracle等)进行数据传送的工具
启动
sqoop-version
Sqoop 抽取方式
原生Sqoop方式插入(HadoopAPI)
1. 支持的数据格式少,允许数据覆盖 2. 插入方式很随意,不要求源表与目标表字段相同,抽取方式是将字段按顺序插入,其余字段为NULL
HCatalog方式插入(HadoopAPI)
1. 支持的数据格式多,只能追加数据 2. 源表与目标表字段需相同,否则会报错,抽取方式是将字段按相同字段插入,哪怕字段个数不相等
将mysql数据 导入到HDFS sqoop import \ --connect jdbc:mysql://172.17.0.202:3306/库名 --username root --password 123456 \ --table 表名 --target-dir /HDFS的路径 -delete-target-dir --fields-terminated-by '\t' -m 1
将mysql数据 导入到hive sqoop import \ --connect "jdbc:mysql://192.168.52.150:3306/库名?useUnicode=true&characterEncoding=utf-8" \ --username root \ --password 123456 \ --query "sql语句 where 1=1 and \$CONDITIONS" \ --fields-terminated-by '\t' \ --hcatalog-database hive库名 \ --hcatalog-table hive表名 \ -m 1
将hive数据 导出到mysql sqoop export \ --connect "jdbc:mysql://192.168.52.150:3306/库名?useUnicode=true&characterEncoding=utf-8" \ --username root \ --password 123456 \ --table mysql表名 \ --hcatalog-database hive库名 \ --hcatalog-table hive表名 \ -m 1
子主题
常用操作
查看帮助
/usr/bin/sqoop help
查看sqoop某参数的帮助
/usr/bin/sqoop list-databases --help
列出主机所有的数据库
/usr/bin/sqoop list-databases \ --connect jdbc:mysql://192.168.52.150:3306/ \ --username root \ --password 123456
查看某一个数据库下面的所有数据表
/usr/bin/sqoop list-tables \ --connect jdbc:mysql://192.168.52.150:3306/库名 \ --username root \ --password 123456
Sqoop 常用参数
数据仓库介绍
数据仓库概念
数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、数据集成的(Integrated)、相对稳定(非易失)的(Non-Volatile)、反映历史变化(时变)(Time Variant)的数据集合,用于支持管理决策(Decision Making Support)。
数据仓库 与 数据库 的区别 OLTP 和 OLAP 的区别
操作型处理,联机事务处理 OLTP(On-Line Transaction Processing),也称为面向交易的处理过程,其基本特征是前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果,是对用户操作快速响应的方式之一,比如ERP系统,CRM系统,互联网电商系统等,这类系统的特点是事务操作频繁,数据量小。
分析型处理,叫联机分析处理OLAP(On-Line Analytical Processing),有时也称为决策支持系统(DSS),支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。这类系统的特点是没有事务性操作,主要是查询操作,数据量大。
详细区别
数据仓库的特点
1. 面向主题
主题是一个抽象的概念,是较高层次上企业信息系统中的数据综合、归类并进行分析利用的抽象。
2. 集成性
通过对分散、独立、异构的数据库数据进行抽取、清理、转换和汇总便得到了数据仓库的数据
3. 非易失性
数据仓库的数据反映的是一段相当长的时间内历史数据的内容
4. 时变性
数据仓库的数据需要更新,以适应决策的需要