数据仓库系列--维度表技术
维度表技术常见:增加列,维度子集,角色扮演维度,层次维度,退化维度,杂项维度,维度合并,分段维度等基本维度表技术。
一.增加列
事实表和维度表上增加列。
Hive上增加列,慎用alter table。原因老版本的hive对ORC格式表的模式修改,尤其是增加列的支持存在很多问题。
JIRA上说2.0.0修复了ORC表模式修改问题。
空值处理:<=>
二.维度子集
有些需求不需要最细节的数据。此时事实数据需要关联特定的维度,这些特定维度包含在从细节维度选择的行中,所以叫维度子集。
细节维度和维度子集具有相同的属性或内容,具有一致性。
1.建立包含属性子集的子维度
比如需要上钻到子维度。
2.建立包含行子集的子维度
当两个维度处于同一细节粒度,但是其中一个仅仅是行的子集,会产生另外一种一致性维度构造子集。
某些版本的Hive中,对ORC表使用overwrite会出错,为保持兼用性,使用truncate 。
3.使用视图实现维度子集
实现维度子集,这种方式两个主要问题:一需要额外的存储空间,因为新创建的子维度是物理表;二是存在数据不一致的潜在风险。
为解决上述问题,常用做法是在基本维度上建立视图生成子维度。
优点:实现简单,不需要修改原来脚本的逻辑;不占用存储空间,因为视图不真正存储数据;消除数据不一致的可能。
缺点:当基本维度和子维度表数据量相差悬殊,性能比物理表差很多;如果定义视图查询,并且视图很多,可能对元数据存储系统造成压力,严重影响查询性能。
三.角色扮演维度
单个物理维度可以被事实表多次引用,每次引用连接逻辑上存在差异的角色维度。例如,事实表可以有多个日期,每个日期通过外键引用不同的日期维度,原则上每个外键表示不同维度视图,这样引用具有不同的含义。这些不同的维度视图具有唯一的代理键列名,被称为角色,相关维度被称为角色扮演维度。
Hive中的order by,sort by ,distribute by,cluster by子句都用于对查询结果进行排序,处理方式不一样。
Hive中order by跟传统的SQL语言的order by作用一样的,会对查询的结果做一次全局排序,如果使用order by ,所有数据都会发送到同一个reduce进行处理。不管多少map,也不管文件有多少block只会起动一个reduce,因为多个reducer无法保证全局有序。对于大量数据这将会消耗很长时间去执行。
Sort by 在每个reducer端都会排序,也就保证了局部有序。
Ditribute by 控制map输出reducer中是如何规划。
假设有一张名为store 的商店表,mid是这个商店所属的商户,money是这个商户的盈利,name商店名称
语句:select mid,money.name from store distribute by mid sort by mid asc,money asc;
所有mid相同数据都会被送到同一个reducer处理,这是因为指定了distribute by mid,这样话就可以统计每个商户中各个商店盈利排序。肯定全局有序。因为相同的商户会放到同一个reducer去处理。
Cluster by 是distribute by和sort by相结合,但是排序只能是升序(至少hive 1.1.0是这样)
四.层次维度
经常使用grouping__id 二进制序列,rollup,collect_set,concat_ws等函数。
层次关系方法:固定深度层次进行分组和钻取查询,递归层次结构数据装载、展开与平面化,多路径层次和参差不齐处理
五.退化维度
除了业务主键外没有其他内容的维度表。
六.杂项维度
包含数据具有很少可能值的维度。有时与其为每个标志或属性定义不同的维度,不如建立单独的讲不同维度合并到一起的杂项维度。
七.维度合并
如果几个相关维度的基数都很小,或者具有多个公共属性时,可以考虑合并。
八.分段维度
包含连续的分段度量值,通常用作客户维度的行为标记时间序列,分析客户行为。
参考《Hadoop构建数据仓库实践》
数据仓库系列--维度表技术相关推荐
- Kettle构建Hadoop ETL实践(八-1):维度表技术
目录 一.增加列 1. 修改数据库模式 2. 修改Sqoop作业项 3. 修改定期装载维度表的转换 4. 修改定期装载事实表的转换 5. 测试 二.维度子集 1. 建立包含属性子集的子维度 2. 建立 ...
- 聊聊数据仓库中维度表设计的二三事
前言 大家好,我是云祁!今天和大家聊聊数据仓库中维度表设计的那些事. 维度表是维度建模的灵魂所在,在维度表设计中碰到的问题(比如维度变化.维度层次.维度一致性.维度整合和拆分等)都会直接关系到维度建模 ...
- 基于数据仓库和维度转换技术的广东电信公话IC话机话务动态分析系统
本文发表于期刊<天津通信技术>2003年4期. 基于数据仓库和维度转换技术的广东电信公话IC话机话务动态分析系统 马根峰 (广东电信公用电话管理中心 广州 510635) 摘要 在电信 ...
- 数仓维度建模之维度表技术基础
数仓维度建模之维度表技术基础 01 维度表结构 组成结构: 主键 + 维度属性 名词解释: 主键:作⽤是与事实表的外键进⾏关联. 维度属性:是⽤于描述维度特性的字段,⼀般作为 group by分组查询 ...
- Kettle构建Hadoop ETL实践(八-2):维度表技术
目录 4. 递归 五.退化维度 1. 退化订单维度 2. 修改定期装载脚本 3. 测试修改后的定期装载 六.杂项维度 1. 新增销售订单属性杂项维度 2. 修改定期装载Kettle作业 3. 测试修改 ...
- 一篇文章搞懂数据仓库:维度表(设计原则、设计方法)
目录 1.什么是维度表? 2.维度表设计原则 (1)维度属性尽量丰富,为数据使用打下基础 (2)给出详实的.富有意义的文字描述 (3)区分数值型属性和事实 (4)沉淀出通用的维度属性,为建立一致性维度 ...
- 数据仓库之维度表和事实表
1 维度表 维度表:一般是对事实的 描述信息.每一张维表对应现实世界中的一个对象或者概念. 例如:用户.商品.日期.地区等. 维表的特征: 维表的范围很宽(具有多个属性.列比较多) 跟事实表相 ...
- HAWQ取代传统数仓实践(十)——维度表技术之杂项维度
一.什么是杂项维度 简单地说,杂项维度就是一种包含的数据具有很少可能值的维度.事务型商业过程通常产生一系列混杂的.低基数的标志位或状态信息.与其为每个标志或属性定义不同的维度,不如建立单独的将不同维度 ...
- 数仓模型之维度表技术
维度表概念 维, 是人们观察数据的特定角度,是考虑问题时的一类属性,属性集合构成一个维. 维度是维度建模的基础和灵魂. 维度属性是查询约束条件.分组和报表标签生成的基本来源,是数据易用性的关键. 维度 ...
最新文章
- 揭秘:支付宝小程序 V8 Worker 技术演进
- c# TCP Socket通讯基础
- STM32H743+CubeMX-QSPI+DMA读取外部FLASH(W25Q128JVSQ)
- mysql静默安装_oracle静默安装文件db_install.rsp详解
- 计算机方向关键字,从计算机的角度理解volatile关键字
- vscode格式化代码快捷键
- android显示txt文件的组件,Android文本控件的介绍
- OpenCV3.1.0安装在ubuntu16.40(Linux)步骤(电赛AM5708板子可用)
- 如何“延迟加载”嵌入式YouTube视频
- 什么是 Python ?聊一聊Python程序员找工作的六大技巧
- 理想汽车高管解读财报:被认定为软件企业 获增值税退税2.8亿
- Apifox 测试工具
- html是网页病毒吗,无弹窗浏览器 目前最具效果性的防网页病毒软件
- RMAN实战1:RMAN备份数据库、控制文件、参数文件、FRA、归档日志
- 【陌陌】数据分析师四面
- (附源码)springboot建材市场销售管理系统 毕业设计 191544
- 拉格朗日函数相关推导
- SILKYPIX Developer Studio Pro 9.0.5.0 破解版 RAW数码照片处理神器
- 2018-8-30-router的自我反思与总结一
- 【Python】【入门篇】十二、Python中协程