维度表技术常见:增加列,维度子集,角色扮演维度,层次维度,退化维度,杂项维度,维度合并,分段维度等基本维度表技术。

一.增加列

事实表和维度表上增加列。

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构建数据仓库实践》

数据仓库系列--维度表技术相关推荐

  1. Kettle构建Hadoop ETL实践(八-1):维度表技术

    目录 一.增加列 1. 修改数据库模式 2. 修改Sqoop作业项 3. 修改定期装载维度表的转换 4. 修改定期装载事实表的转换 5. 测试 二.维度子集 1. 建立包含属性子集的子维度 2. 建立 ...

  2. 聊聊数据仓库中维度表设计的二三事

    前言 大家好,我是云祁!今天和大家聊聊数据仓库中维度表设计的那些事. 维度表是维度建模的灵魂所在,在维度表设计中碰到的问题(比如维度变化.维度层次.维度一致性.维度整合和拆分等)都会直接关系到维度建模 ...

  3. 基于数据仓库和维度转换技术的广东电信公话IC话机话务动态分析系统

    本文发表于期刊<天津通信技术>2003年4期. 基于数据仓库和维度转换技术的广东电信公话IC话机话务动态分析系统 马根峰 (广东电信公用电话管理中心 广州 510635) 摘要   在电信 ...

  4. 数仓维度建模之维度表技术基础

    数仓维度建模之维度表技术基础 01 维度表结构 组成结构: 主键 + 维度属性 名词解释: 主键:作⽤是与事实表的外键进⾏关联. 维度属性:是⽤于描述维度特性的字段,⼀般作为 group by分组查询 ...

  5. Kettle构建Hadoop ETL实践(八-2):维度表技术

    目录 4. 递归 五.退化维度 1. 退化订单维度 2. 修改定期装载脚本 3. 测试修改后的定期装载 六.杂项维度 1. 新增销售订单属性杂项维度 2. 修改定期装载Kettle作业 3. 测试修改 ...

  6. 一篇文章搞懂数据仓库:维度表(设计原则、设计方法)

    目录 1.什么是维度表? 2.维度表设计原则 (1)维度属性尽量丰富,为数据使用打下基础 (2)给出详实的.富有意义的文字描述 (3)区分数值型属性和事实 (4)沉淀出通用的维度属性,为建立一致性维度 ...

  7. 数据仓库之维度表和事实表

    1 维度表 维度表:一般是对事实的 描述信息.每一张维表对应现实世界中的一个对象或者概念. 例如:用户.商品.日期.地区等. 维表的特征:  维表的范围很宽(具有多个属性.列比较多)  跟事实表相 ...

  8. HAWQ取代传统数仓实践(十)——维度表技术之杂项维度

    一.什么是杂项维度 简单地说,杂项维度就是一种包含的数据具有很少可能值的维度.事务型商业过程通常产生一系列混杂的.低基数的标志位或状态信息.与其为每个标志或属性定义不同的维度,不如建立单独的将不同维度 ...

  9. 数仓模型之维度表技术

    维度表概念 维, 是人们观察数据的特定角度,是考虑问题时的一类属性,属性集合构成一个维. 维度是维度建模的基础和灵魂. 维度属性是查询约束条件.分组和报表标签生成的基本来源,是数据易用性的关键. 维度 ...

最新文章

  1. 揭秘:支付宝小程序 V8 Worker 技术演进
  2. c# TCP Socket通讯基础
  3. STM32H743+CubeMX-QSPI+DMA读取外部FLASH(W25Q128JVSQ)
  4. mysql静默安装_oracle静默安装文件db_install.rsp详解
  5. 计算机方向关键字,从计算机的角度理解volatile关键字
  6. vscode格式化代码快捷键
  7. android显示txt文件的组件,Android文本控件的介绍
  8. OpenCV3.1.0安装在ubuntu16.40(Linux)步骤(电赛AM5708板子可用)
  9. 如何“延迟加载”嵌入式YouTube视频
  10. 什么是 Python ?聊一聊Python程序员找工作的六大技巧
  11. 理想汽车高管解读财报:被认定为软件企业 获增值税退税2.8亿
  12. Apifox 测试工具
  13. html是网页病毒吗,无弹窗浏览器 目前最具效果性的防网页病毒软件
  14. RMAN实战1:RMAN备份数据库、控制文件、参数文件、FRA、归档日志
  15. 【陌陌】数据分析师四面
  16. (附源码)springboot建材市场销售管理系统 毕业设计 191544
  17. 拉格朗日函数相关推导
  18. SILKYPIX Developer Studio Pro 9.0.5.0 破解版 RAW数码照片处理神器
  19. 2018-8-30-router的自我反思与总结一
  20. 【Python】【入门篇】十二、Python中协程

热门文章

  1. 怎么从服务器上文件拷贝下来
  2. Oracle ora-12560报错的解决办法
  3. linux报ora12560,测试ORA-12560和ORA-12500
  4. powerdesinger 批量修改表前缀
  5. 【开源项目】之健康助手
  6. 工作流相关讲解 转载
  7. Hadoop-大数据引言
  8. 生物统计分析之ROC曲线分析
  9. Liunx userdel删除用户时提示userdel: user *** is currently used by process 12910
  10. VS 一个解决方案里面建立多个项目