Hive 索引
由Lefty Leverenz创建,最后修改于六月17,2018
从3.0开始删除索引
还有一些替代选项可能与索引相似:
- 具有自动重写的物化视图可以产生非常相似的结果。 Hive 2.3.0 添加了对实体视图的支持。
- 使用列式存储文件格式(Parquet, ORC) – 它们可以进行选择性扫描;他们甚至可能会跳过整个文件/块。
索引已 在3.0版(HIVE-18448)中删除。
Hive索引概述
Hive索引的目标是提高对表的某些列的查询查找的速度。如果没有索引,则使用判断式(例如“ WHERE tab1.col1 = 10”)的查询会加载整个表或分区并处理所有行。但是,如果存在col1的索引,则只需要加载和处理文件的一部分。
索引可以提供的查询速度的提高是以创建索引的额外处理和存储索引的磁盘空间为代价的。
版本号
在0.7.0版中添加了Hive索引,在0.8.0版中添加了位图索引。
索引资源
可以在以下位置找到有关如何使用Hive索引的文档和示例:
-
索引 –设计文档(列出以当前状态索引JIRA的列表,从HIVE-417开始)
-
被索引的Hive – Prafulla Tekawade和Nikhil Deshpande的概述和示例,2010年10月
-
教程:使用Hadoop和Hive与MapReduce进行类似SQL的联接和索引 – Ashish Garg撰写的博客,2012年4月
Hive索引的配置参数
在配置属性文件描述参数配置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;
网友评论