IndexDev
范围
目前只支持单表索引。本文档目前包含索引的创建和维护。
索引创建
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"]
元数据模型
支持索引的元数据模型见下图所示:
http://issues.apache.org/jira/secure/attachment/12449601/idx2.png
元数据模型中的新表IDXS 包含每一个索引的入口。它和TBLS 表的2个关系如下:
#ORIG_TBL_ID是包含索引数据的基础表ID的强制外键引用
#IDX_TBL_ID是索引表示表ID的可选的外键引用。它是可选的是因为不是所有的索引实现需要表作存储。对于需要表存储的索引,隐含创建的表的TBL_TYPE会被设置为 INDEX_TABLE.
对于如下的DDL:
CREATE TABLE t(i int, j int);
CREATE INDEX x ON TABLE t(j)
AS 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler';
元数据中的TBLS表会有2个入口:
#一个为基础表t
#一个是索引表,自动命名为default+t_x+
IDXS表中x的入口中,ORIG_TBL_ID会引用到x的TBL_ID,并且IDX_TBL_ID会引用到default+t_x+的TBL_ID.
为了防止自动生成的索引表名,一个用户指定的表名例如t_x可以被提供,如下所示:
CREATE INDEX x ON TABLE t(j)
AS 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'
IN TABLE t_x;
REBUILD
ALTER INDEX index_name ON table_name [PARTITION (...)] REBUILD
DROP INDEX
DROP INDEX index_name ON table_name
更多可见:https://cwiki.apache.org/confluence/display/Hive/IndexDev