Hive索引概述
Hive索引的目标是提高对表的某些列的查询查询的速度。如果没有索引,使用谓词(如“WHERE tab1.col1 = 10”)的查询将加载整个表或分区,并处理所有行。但是如果col1存在索引,则只需要加载和处理文件的一部分。
索引可以提供的查询速度的提高以创建索引和磁盘空间以存储索引的额外处理为代价。
版本
Hive索引在版本0.7.0中添加,位图索引添加在版本0.8.0中。
索引资源
如何使用Hive索引的文档和示例可以在这里找到:
- Indexed Hive - 概述和示例,Prafulla Tekawade和Nikhil Deshpande,2010年10月
- 教程:使用Hadoop和Hive的类似SQL的连接和索引与MapReduce - 博客作者Ashish Garg,2012年4月
Hive索引的配置参数
在配置属性文件描述了配置蜂巢指标参数。
简单示例
本节给出了从Hive测试套件中修改的一些索引示例。
区分大小写
在Hive 0.12.0和更低版本中,对于CREATE INDEX和DROP INDEX语句,索引名称区分大小写。但是,ALTER INDEX需要使用小写字母创建的索引名称(请参阅 HIVE-2752)。 通过使索引名称对所有HiveQL语句不区分大小写,此错误在 Hive 0.13.0中得到了修复。对于0.13.0之前的版本,最佳做法是对所有索引名称使用小写字母。
创建/构建,显示和删除索引:
CREATE INDEX table01_index ON TABLE table01(column2)AS'COMPACT'; SHOW INDEX ON table01; DROP INDEX table01_index ON table01;
创建然后构建,显示格式化(使用列名),并删除索引:
CREATE INDEX table02_index ON TABLE table02(column3)AS'COMPACT'WITH DEFERRED REBUILD; ALTER INDEX table02_index ON table2 REBUILD; SHOW FORMATTED INDEX ON table02; DROP INDEX table02_index ON table02;
创建位图索引,构建,显示和删除:
CREATE INDEX table03_index ON TABLE table03(column4)AS'BITMAP'WITH DEFERRED REBUILD; ALTER INDEX table03_index ON table03 REBUILD; SHOW FORMATTED INDEX ON table03; DROP INDEX table03_index ON table03;
在新表中创建索引:
CREATE INDEX table04_index ON TABLE table04(column5)AS'COMPACT'WITH DEFERRED REBUILD IN TABLE table04_index_table;
创建索引存储为RCFile:
CREATE INDEX table05_index ON TABLE table05(column6)AS'COMPACT'STORED AS RCFILE;
创建索引存储为文本文件:
CREATE INDEX table06_index ON TABLE table06(column7)AS'COMPACT'ROW FORMAT DELIMITED FIELDS TERMINATED BY'\ t'STORED AS TEXTFILE;
创建带索引属性的索引:
CREATE INDEX table07_index ON TABLE table07(column8)AS'COMPACT'IDXPROPERTIES(“prop1”=“value1”,“prop2”=“value2”);
使用表格属性创建索引:
CREATE INDEX table08_index ON TABLE table08(column9)AS'COMPACT'TBLPROPERTIES(“prop3”=“value3”,“prop4”=“value4”);
丢弃索引(如果存在):
DROP INDEX IF EXISTS table09_index ON table09;
在分区上重建索引:
ALTER INDEX table10_index ON table10 PARTITION(columnX ='valueQ',columnY ='valueR')REBUILD;