语法格式
CREATE INDEX index_name ON [database_name.]table_name(column_name)
[key_dc_size = dc_value][key_block_size = size_value] USING HASH [GLOBAL];
index_name:索引名。
GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 664
GLOBAL:默认创建GLOBAL 的哈希索引。创建全局哈希索引,全局创建索
引针对整列,
数据按页存储,
每个数据块占用多少个页可以在创建索引时指定。
key_dc_size = dc_value:当使用GLOBAL 关键字时,可以配合使用它,这个参
数表示指定创建分段Hash Index。分段hash 是在用户指定的DC 窗口内创建
Hash Index,每个分段hash index 内部沿用了原有global hash 的逻辑和存储结
构。由于分段Hash Index 的具有数据局部性,因此可以与数据一同进行空间的
分段回收。
表 5-2 dc_value 值
最小值
最大值
备注
0
2147483646
默认为0(即在整列上创建HASH)
key_block_size = size_value:当使用GLOBAL 关键字时,可以配合使用它,这
个参数表示指定每个数据块的大小。
表 5-3 size_value 值
最小值
最大值
备注
4096
32768
size_value 必须是4096 的整数倍
一般来说,二进制类型的列不适合使用HASH INDEX,或者该列数据量较大,但
DISTINCT 值较少时,也不适合使用HASH INDEX。
同一表上不能创建相同名称的哈希索引,
同一表的同一列上能且只能创建一个哈希
索引,并且除去BLOB 和TEXT 数据类型外,任何GBase UP 支持的数据类型的列
上都可以创建哈希索引。
创建索引时,
只能指定单列,
不能指定多列创建联合索引。
示例
示例1:创建GLOBAL 哈希索引。
gbase> CREATE INDEX idx2 on t1(b) USING HASH GLOBAL;
Query OK, 0 rows affected
Records: 0 Duplicates: 0 Warnings: 0
示例2:创建GLOBAL 哈希索引,设置key_block_size 值为16384。
gbase> CREATE INDEX idx3 on t1(b) key_block_size=16384 USING HASH GLOBAL;
Query OK, 0 rows affected
Records: 0 Duplicates: 0 Warnings: 0
示例3:创建GLOBAL 哈希索引,设置key_dc_size 值为50。
gbase> CREATE INDEX idx4 on t1(b) key_dc_size=50 USING HASH GLOBAL;
Query OK, 0 rows affected
Records: 0 Duplicates: 0 Warnings: 0
语法格式(只能用于Hive 表):
GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 665
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]
[PARTITION BY (index_table_col_name, …)]
[
[ ROW FORMAT ...] STORED AS ...
| STORED BY ...
]
[LOCATION hdfs_path]
[TBLPROPERTIES (...)]
[COMMENT "index comment"];
index_name:索引名。
base_table_name:需要创建索引的表名
col_name:需要创建索引的列名
index.handler.class.name:
索引处理器,
也就是一个实现了索引接口的JAVA 类,
也可以采用第三方的实现
WITH DEFERRED REBUILD:表明创建一个空索引,需要执行 alter index 指
令来创建索引数据
IDXPROPERTIES:索引的自定义属性,比如创建人,创建时间等
index_table_name:保存索引数据的表名,后续的partition by,ROW FOWMAT
等属性,参考 create table 中的设置
hdfs_path:索引数据存储在HDFS 中的路径
TBLPROPERTIES:表的自定义属性,比如创建人,创建时间等
index comment:索引的注释信息
示例4:在表 src 上创建索引
GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 666
gbase> create index src_index_1
-> on table src(i)
-> as 'compact'
-> WITH DEFERRED REBUILD
-> idxproperties('creator' = 'yuwei','date' = '2016-03-17')
-> in table index_table_1
-> ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
-> STORED AS TEXTFILE
-> location '/tmp/gbase8up'
-> tblproperties ('creator' = 'yuwei', 'date' = '2016-03-17')
-> comment 'index_table';
Query OK, 0 rows affected
Records: 0 Duplicates: 0 Warnings: 0