Hive编程(八)【HiveQL:索引】

Hive只有有限的索引功能。没有关系型数据库中键的概念。

8.1 创建索引

对如下管理分区表建立索引

CREATE TABLE employees ( 
name STRING,
salary FLOAT,
subordinates ARRAY<STRING>,
deductions MAP<STRING, FLOAT>,
address STRUCT<street:STRING, city:STRING, state:STRING, zip:INT>
)
PARTITIONED BY (country STRING, state STRING);
CREATE INDEX employees_index 
ON TABLE employees (country)
AS 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'
WITH DEFERRED REBUILD
IDXPROPERTIES ('creator = 'me', 'created_at' = 'some_time')
IN TABLE employees_index_table
PARTITIONED BY (country, name)
COMMENT 'Employees indexed by country and name.';

AS ... 指定了索引处理器(一个实现了索引接口的Java类),Hive本身提供了一些典型的索引实现。

Bitmap索引

bitmap 创建索引,用于排重后值较少的列。如:

CREATE INDEX employees_index 
ON TABLE employees (country)
AS 'BITMAP'
WITH DEFERRED REBUILD
IDXPROPERTIES ('creator = 'me', 'created_at' = 'some_time')
IN TABLE employees_index_table
PARTITIONED BY (country, name)
COMMENT 'Employees indexed by country and name.';

8.2 重建索引

若指定了WITH DEFERRED REBUILD,新索引将是空的。随时可以进行第一次索引创建或者使用ALTER INDEX重建索引。

ALTER INDEX employees_index 
ON TABLE employees
PARTITION (country = 'US')
REBUILD;

若省略掉PARTITION将会对所有分区进行索引重建。

8.3 显示索引

SHOW FORMATTED INDEX ON employees; 

FORMATTED 是可选的。增加这个关键字可以使输出中包含有列名。可以替换为INDEXINDEXES,可以输出更多的索引信息。

8.4 删除索引

DROP INDEX IF EXISTS employees_index ON TABLE employees; 

删除索引将会删除索引表。

Hive不允许使用DROP TABLES删除索引表。

如果被索引的表被删除了,索引和索引表也会被删除。

如果表的某个分区被删除了,那么这个分区对应的分区索引也会同时被删除掉。

8.5 实现一个定制化的索引处理器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值