索引
- Hive从0.7.0版本开始引入了索引,目的是提高Hive表指定列的查询速度。没有索引的时候,Hive在执行查询时需要加载整个表或者整个分区(分区表并提供了相关过滤条件),即使你加了带有谓词的查询(如’WHERE table.column = 10’)依然会加载整个表或分区并处理所有行。但当在指定列上存在索引,再通过指定列查询时,那么只会加载和处理部分文件。在可以预见到分区数据非常庞大的情况下,索引常常是优于分区的。
- 此外,同传统关系型数据库一样,增加索引在提升查询速度的同时,会额外消耗资源去创建索引和需要更多的磁盘空间存储索引,但是Hive只有有限的索引功能,没有普通关系型数据库中键的概念,而且索引也不会自动更新
- Hive 0.8.0版本中增加了bitmap索引。
1. 机制和原理
- Hive的索引其实是一张索引表(Hive的物理表),里面的字段包括:索引列的值、该值对应的 HDFS 文件路径、该值在文件中的偏移量。在查询涉及到索引字段时,首先到索引表查找索引列值对应的 HDFS 文件路径及偏移量,这样就避免了全表扫描。
- 当Hive通过索引列执行查询时,首先通过一个MRJob去查询索引表,根据索引列的过滤条件