当前位置:   article > 正文

Hive中索引的使用_hive2.0支持索引吗

hive2.0支持索引吗

一、索引的作用

Hive支持索引,但是Hive的索引与关系型数据库中的索引并不相同,比如,Hive不支持主键或者外键。

Hive索引可以建立在表中的某些列上,以提升一些操作的效率,例如减少MapReduce任务中需要读取的数据块的数量。

在可以预见到分区数据非常庞大的情况下,索引常常是优于分区的。

虽然Hive并不像事物数据库那样针对个别的行来执行查询、更新、删除等操作。它更多的用在多任务节点的场景下,快速地全表扫描大规模数据。但是在某些场景下,建立索引还是可以提高Hive表指定列的查询速度。(虽然效果差强人意)

二、索引适用的场景

适用于不更新的静态字段。以免总是重建索引数据。每次建立、更新数据后,都要重建索引以构建索引表。

Hive索引的机制如下:

hive在指定列上建立索引,会产生一张索引表(Hive的一张物理表),里面的字段包括,索引列的值、该值对应的HDFS文件路径、该值在文件中的偏移量;

v0.8后引入bitmap索引处理器,这个处理器适用于排重后,值较少的列(例如,某字段的取值只可能是几个枚举值)

因为索引是用空间换时间,索引列的取值过多会导致建立bitmap索引表过大。

但是,很少遇到hive用索引的,说明还是有缺陷or不合适的地方的,3.0 后hive去掉了索引.

三、索引的建立与使用

create index index_name
on table base_table_name (col_name, ...)
as 'index.handler.class.name'
[with deferred rebuild]
[idxproperties (property_name=property_value, ...)]
[in table index_table_name]
[partitioned by (col_name, ...)]
[
   [ row format ...] stored as ...
   | stored by ...
]
[location hdfs_path]
[tblproperties (...)]
[comment "index comment"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

as ‘index.handler.class.name’ 指定索引处理器,这里的一般使用org.apache.hadoop.hive.ql.index.compact.compactindexhandler 这个处理器。

[with deferred rebuild] 表明创建一个空索引,也就是说现在还不创建索引

[in table index_table_name] 索引存储在哪个表中。

[idxproperties (property_name=property_value, …)] 索引的参数。一般使用idxproperties (‘creator’ = ‘me’,‘created_at’ = ‘some_time’),代表创建者和创建时间。

[partitioned by (col_name, …)]
[
[ row format …] stored as …
| stored by …
]

表明只对某个分区创建索引,若没有该选项则表示对所有分区都创建索引,另外要注意的是index的分区索引默认是和表的分区一致的,也不能对视图view创建索引。

例如:

create index index_bill_id on table t_travel_members_m (bill_id) 
as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' 
with deferred rebuild;
  • 1
  • 2
  • 3

显示索引

show index on t_travel_members_m;  
  • 1

重建数据

建立完索引之后 需要重建索引数据,会触发一个mr job

alter index index_bill_id on  t_travel_members_m rebuild;
  • 1

删除索引

 drop index if exists index_bill_id on t_travel_members_m;  
  • 1

使用索引

set hive.input.format=org.apache.hadoop.hive.ql.io.hiveinputformat;
set hive.optimize.index.filter=true;
set hive.optimize.index.filter.compact.minsize=0;
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/720591
推荐阅读
相关标签
  

闽ICP备14008679号