Hive编程指南 第8章 HiveQL索引

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/myvanguard/article/details/86670572

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

8.1创建索引

下面我们仅对分区字段country建立索引:

CREATE INDEX employees indexON 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类。

Bitmap索引
bitmap索引普遍应用于排重后值较少的列。下面是对前面的例子使用bitmap索引处理器重写后的语句:

CREATE INDEX employees indexON 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重建索引

如果用户指定了DEFERREDREBUILD,那么新索引将呈现空白状态。在任何时候,都可以进行第一次索引创建或者使用ALTERINDEX对索引进行重建:

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

如果省略掉PARTITION,那么将会对所有分区进行重建索引。
还没有一个内置的机制能自动触发重建索引。

8.3显示索引

下面这个命令将显示对于这个索引表对所有列所建立的索引:

SHOW FORMATTED INDEX ON employees;

关键字FORMATTED是可选的。增加这个关键字可以使输出中包含有列名称。
用户还可以替换INDEX为INDEXES,这样输出中就可以列举出多个索引信息了。

8.4删除索引

如果有索引表的话,删除一个索引将会删除这个索引表:

DROP INDEX IF EXISTS employees index ON TABLE employees;

Hive 不允许用户直接使用DROP TABLE 语句之前删除索引表。而通常情况下,IF EXISTS都是可选的,其用于当索引不存在时避免抛出错误信息。

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

扫描二维码关注公众号,回复: 5097507 查看本文章

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

参考org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler中的源代码作为例子来学习的。

猜你喜欢

转载自blog.csdn.net/myvanguard/article/details/86670572