我是靠谱客的博主 超帅枫叶,最近开发中收集的这篇文章主要介绍数仓工具—Hive进阶之索引(1),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

索引

  • Hive从0.7.0版本开始引入了索引,目的是提高Hive表指定列的查询速度。没有索引的时候,Hive在执行查询时需要加载整个表或者整个分区(分区表并提供了相关过滤条件),即使你加了带有谓词的查询(如’WHERE table.column = 10’)依然会加载整个表或分区并处理所有行。但当在指定列上存在索引,再通过指定列查询时,那么只会加载和处理部分文件。在可以预见到分区数据非常庞大的情况下,索引常常是优于分区的。
  • 此外,同传统关系型数据库一样,增加索引在提升查询速度的同时,会额外消耗资源去创建索引和需要更多的磁盘空间存储索引,但是Hive只有有限的索引功能,没有普通关系型数据库中键的概念,而且索引也不会自动更新
  • Hive 0.8.0版本中增加了bitmap索引。

1. 机制和原理

  • Hive的索引其实是一张索引表(Hive的物理表),里面的字段包括:索引列的值、该值对应的 HDFS 文件路径、该值在文件中的偏移量。在查询涉及到索引字段时,首先到索引表查找索引列值对应的 HDFS 文件路径及偏移量,这样就避免了全表扫描。
  • 当Hive通过索引列执行查询时,首先通过一个MRJob去查询索引表,根据索引列的过滤条件,查询出该索引列值对应的HDFS文件目录及偏移量,并且把这些数据输出到HDFS的一个文件中,然后再根据这个文件中去筛选原文件,作为查询Job的输入

在指定列上建立索引,会产生一张索引表(表结构如下),


                

最后

以上就是超帅枫叶为你收集整理的数仓工具—Hive进阶之索引(1)的全部内容,希望文章能够帮你解决数仓工具—Hive进阶之索引(1)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部