Hive索引
要想使用以下任何一种索引,都必须打开全局索引开关
hive.optimize.index.filter
hive索引分为三种
1.原始索引(淘汰不使用)
2.行组索引,Row Group Index
3.Bloom Filter Index
注意:后面两种索引只适用于ocr格式的文件
一、Hive原始索引
一般不会
在Hive3.0中已被删除
二、Row Group Index
行组索引、主要用于数值类型条件查询。(=、<,>),如:int,时间戳类型
注意:为了使Row Group Index有效利用,向表中加载数据时,必须对需要使用索引的字段进行排序
如何生效
1.创建表时生效
'orc.create.index'='true'
create table test
(id int, pid int)
stored AS ORC
tblproperties ('orc.compress'='SNAPPY', 'orc.create.index'='true');
2.插入时生效
Insert into test
select * from test123 clusterd by id;
#distributed by id sorted by id
使用索引
set hive.optimize.index.filter=true;
select * from test where id > 5 or id <=10;
三、Bloom Filter Index
作用
所有等值条件,都可以使用此索引。包括String和Int类型等。
如何生效
创建表时
'orc.create.index'='true',
'orc.bloom.filter.columns'='pid'
如果指定多列索引,使用如下方式
'orc.create.index'='true',
'orc.bloom.filter.columns'='pid,id,name'
create table test
(id int, pid int)
stored AS ORC
tblproperties ('orc.compress'='SNAPPY',
'orc.create.index'='true',
'orc.bloom.filter.columns'='pid'
);
使用索引
in 也包含在等值条件里面
select * from test where pid=50 or pid in (100, 20);