【老贝伏枥】HIVE的索引、分区和分桶

栏目: 服务器 · 发布时间: 6年前

1、索引

  • Hive索引目的是提高Hive表指定列的查询速度
  • Hive支持索引,但是Hive的索引与关系型数据库中的索引并不同,如 Hive不支持主键或者外键
  • 没有索引时Hive会加载整张表或分区,然后处理所有的rows,有索引时只会加载和处理文件的一部分
    增加索引在提升查询速度时,也会消耗额外资源去创建索引表和需要更多的磁盘空间存储索引

2、分区

  • 为了进行合理的管理以及查询效率,Hive可以将表组织成“分区”
  • 分区是表的部分列的集合,可以为频繁使用的数据建立分区,这样查找分区中的数据时就不需要扫描全表,对提高查找效率很有利
  • 分区是一种根据partition column的值对表进行粗略划分的机制
  • Hive中每个分区对应着表很多的子目录,将所有的数据按照分区列放入到不同的子目录中去
  • Hive分区使用HDFS的子目录功能实现,每一个子目录包含了分区对应的列名和每一列的值。但是由于HDFS并不支持大量的子目录,这也给分区的使用带来了限制。有必要对表中的分区数量进行预估,从而避免因为分区数量过大带来一系列问题
  • Hive查询通常使用分区的列作为查询条件,可以指定MapReduce任务在HDFS中指定的子目录下完成扫描的工作
  • HDFS的文件目录结构可以像索引一样高效利用。

3、分桶

在分区数量过于庞大以至于可能导致文件系统崩溃时,就需要使用分桶来解决问题了。

桶是通过对指定列进行哈希计算来实现的,通过哈希值将一个列名下的数据切分为一组桶 ,并使每个桶对应于该列名下的一个存储文件。

分区中的数据可以被进一步拆分成桶,使用列的hash值对数据打散,并分发到各个不同的桶中从而完成数据的分桶过程。

注意,hive使用对分桶所用的值进行hash,并用hash结果除以桶的个数做取余运算的方式来分桶,保证了每个桶中都有数据,但每个桶中的数据条数不一定相等。

哈希函数的选择依赖于桶操作所针对的列的数据类型。除了数据采样,桶操作也可以用来实现高效的Map端连接操作。

【老贝伏枥】HIVE的索引、分区和分桶

  1. 在数据量足够大的情况下,分桶比分区,有更高的查询效率。
  2. 索引和分区最大的区别就是索引不分割数据库,分区分割数据库。
  3. 索引其实就是拿额外的存储空间换查询时间,但分区已经将整个大数据库按照分区列拆分成多个小数据库了。
  4. 分区和分桶最大的区别就是分桶随机分割数据库,分区是非随机分割数据库。
  • 分桶是按照列的哈希函数进行分割的,相对比较平均;
  • 分区是按照列的值来进行分割的,容易造成数据倾斜。
  • 分桶是对应不同的hdfs文件(细粒度),分区是对应不同的hdfs文件夹(粗粒度)

注意:普通表、分区表这三个都是对应HDFS上的目录,桶表对应是目录里的文件

【老贝伏枥】HIVE的索引、分区和分桶

本文由贝克汉姆 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。

转载、引用前需联系作者,并署名作者且注明文章出处。

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

联盟

联盟

里德•霍夫曼、本•卡斯诺查、克里斯•叶 / 路蒙佳 / 中信出版社 / 2015-2-5 / 39.00元

在充满变化的世界,联盟潜在的合伙人 将不确定的行业转变为可掌控的职业生涯 与世界紧密连接,开创精彩的事业与未来 终生效忠于一家公司已经成为历史,我们正在经历的自由雇佣制——将员工看作自由人——无法建立创新所需的高度信任与合作的关系。 互联网时代,企业如何用全新的人才策略定义员工的忠诚?未来职业成功的秘诀是什么? 《联盟》提供了一种使雇主与员工之间从商业交易转变为互惠关......一起来看看 《联盟》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具