数据仓库架构
源数据落地区【SDF,source data file】
数据仓库层【DW,data warehouse】
数据集市层【DM,data market】
数据仓库层(DW)内部架构
源数据层【DWB,data warehouse base】
细节数据层【DWD,data warehouse detail】
汇总数据层【DWS,data warehouse summary】
DWD与DWS是并列关系,虽然DWS由DWD计算得来
数据仓库层(DW)
水平划分:源数据层 → 细节数据层 → 汇总数据层
垂直划分:流量域、产品域、财务域、内容域……
数据仓库建模
发展阶段
简单报表阶段:解决日常工作中业务人员需要的报表
数据集市阶段:根据业务部门的需求定制多维度报表,提供决策数据
数据仓库阶段:提供跨部门的业务报表数据,提供全方位的数据支持
数据建模的意义
进行全面的业务梳理,改进业务流程
提供全方位的视角,消灭信息孤岛和数据差异
解决业务变动和数据仓库的灵活性
帮助数据仓库系统本身的建设
数据建模的方式
业务建模 → 领域概念建模 → 逻辑建模 → 物理建模
范式建模法
第一范式:无重复的列
第二范式:字段完全依赖主键
第三范式:不能出现依赖传递(两个表中不能出现相同的列,除了主键)
维度建模法
概念说明
事实表:将一个事实建立为一张表(比如一个订单,一个商品)
维度表:事实表所依赖的一张表(在事实表中常以一个id字段连接一个维度表)
星形建模法:维度表不会连接次级维度表
雪花建模法:维度表以相同的方式连接次级维度表
追求简便可以使用星形建模法,但会有数据冗余;追求严谨可以使用雪花建模法
实体建模法不常用
由实体与实体之间的关系组成
数据分析
hive对数据分析的支持
hive数据分析函数:分析函数,窗口函数,增强Group(用的很少)三类,以及用于辅助表达的over从句。 因为明细数据和聚合数据不能同时出现在一张表中,所以需要hive数据分析函数。
分析函数(不支持与window子句联用,即rows between)
ntile:用于数据分片排序,并返回当前分片值。不均匀的时候,依次增加前面分片序列的数量。
row_number:用于排序,按照顺序,不关心是否有相等的情况,从1开始逐条给数据加1 后的序列号。
rank:用于排序,按顺序关心相等情况,如遇到相等情况,名次会留下空位。如122446
dense_rank:用于排序,关心相等情况,如遇到相等情况,名次不会留下空位。如122334
窗口函数
lag:函数lag(col,n,default)用于统计窗口往上第N行值。
第一个参数为 列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往 上第n行为null中,取默认值,如不指定,则为null)
lead: 与LAG作用相反,函数形式如LEAD(col,n,DEFAULT)
用于统计窗口内往下第n行值。
第一个参数为列名,第二个参数为往下第n行(可选,默认为1),第三个参数为默认值(当往下第n行为NULL时候,取默认值,如不指定,则为NULL)
FIRST_VALUE: 取分组内排序后,截止到当前行,第一个值
LAST_VALUE:与FIRST_VALUE相反,取分组内排序后,截止到当前行,最后一个值
over()从句:指定分析窗口函数的细化落维规则
与标准的聚合函数联用,如sum() over()
与匹配的分析窗口联用,如row_number()over()
使用PARTITION BY语句,使用一个或者多个原始数据类型的列
使用PARTITION BY与ORDER BY语句,使用一个或者多个数据类型的分区或者排序列
使用窗口规范,窗口规范支持以下格式:
rows between:即为window子句或称窗口子句,属于物理截取,即物理窗口,从行数上控制截取数据的大小多少。
range between: 即为window子句或称窗口子句,属于逻辑截取,即逻辑窗口,从列值上控制窗口的大小多少。
preceding:window子句之往前
following:window子句之往后
current row:window子句之当前行
unbounded:window子句之起点,UNBOUNDED PRECEDING 表示从前面的起点。
UNBOUNDED following:表示到后面的终点。
注意:order by子句后边如果没有跟着多大窗口,则默认为range between unbounded preceding and current row