Hive是否支持索引
Hive表中是可以对某些字段添加索引来加速某些操作
Hive索引机制和原理
Hive表的索引数据是存储在另一张表中的,在表里面存储索引列的值,该值对应的HDFS的文件路径,该值在数据文件中的偏移量。
当Hive通过索引列执行查询时,首先通过一个MR Job去查询索引表,根据索引列的过滤条件,查询出该索引列值对应的HDFS文件目录及偏移量,并且把这些数据输出到HDFS的一个文件中,然后再根据这个文件中去筛选原文件,作为查询Job的输入。
Hive索引的使用场景
当数据文件的逻辑分区太多太细而导致分区几乎无法使用的时候,建立索引就可以成为分区的另一个选择。建立索引可以帮助裁剪一张表的一些数据块,可以减少MapReduce的输入数据量。
但是hive的维护需要额外的存储空间,索引的创建也需要一定的计算资源,因此使用索引和好处和付出的代价也是需要衡量的。
Hive索引的优缺点
优点:
- 可以避免全表扫描和资源浪费
- 可以加快含有group by的语句的查询速度
缺点:
- 维护和创建索引需要额外的内存和计算资源
- 不会自动刷新,如果表有数据变动,索引表需要手动刷新