返回首页

gbase数据、南大通用产品文档:GBase8aCREATE INDEX

更新日期:2024年09月11日

语法格式
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

(1 row)

timezone
与UTC 的时区偏移量,单位为秒。正数对应UTC 东边的时区,负数对应UTC 西边的
时区。

timezone_hour
时区偏移量的小时部分。

timezone_minute
时区偏移量的分钟部分。

week
该天在所在的年份里是第几周。
ISO 8601 定义一年的第一周包含该年的一月四日(ISO-8601 的周从星期一开始)
。换句
话说,一年的第一个星期四在第一周。在ISO 定义里,一月的头几天可能是前一年的第52
或者第53 周,十二月的后几天可能是下一年第一周。比如,2005-01-01 是2004 年的第53
周,而2006-01-01 是2005 年的第52 周,2012-12-31 是2013 年的第一周。建议isoyear 字段
和week 一起
使用以得到一致的结果。
gbase=# SELECT EXTRACT(WEEK FROM TIMESTAMP '2001-02-16 20:38:40');
date_part
-----------

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
206
7
(1 row)

year
年份域
gbase=# SELECT EXTRACT(YEAR FROM TIMESTAMP '2001-02-16 20:38:40');
date_part
-----------
2001
(1 row)

对于 UNIX™ 和 Windows™,可添加新的 DSN 选项 NeedODBCTypesOnly。
对于 UNIX,在 odbc.ini 文件中的 DSN 设置之下,添加新的 DSN 选项
NeedODBCTypesOnly:
[GBase 8s]
Driver=/gbasedbt/lib/cli/libthcli.so
Description=GBase 8s ODBC Driver
….
NeedODBCTypesOnly=1
对于 Windows,
对于 GBase 8s Driver DSN [缺省值为 0],
请检查 ODBC Administration 的
Advanced 标签之下的此选项。
下表展示如何将 GBase 8s 数据类型映射至标准 ODBC 数据类型。
表 1. GBase 8s 和 ODBC 数据类型映射
GBase 8s
ODBC
Bigint
SQL_BIGINT
Bigserial
SQL_BIGINT
Blob
SQL_LONGVARBINARY
Boolean
SQL_BIT
Clob
SQL_LONGVARCHAR
Int8
SQL_BIGINT
Lvarchar
SQL_VARCHAR
Serial8
SQL_BIGINT
Multiset
SQL_C_CHAR or SQL_C_BINARY
Set
SQL_C_CHAR or SQL_C_BINARY
List
SQL_C_CHAR or SQL_C_BINARY
Row
SQL_C_CHAR or SQL_C_BINARY

GBase 8s ODBC Driver 程序员指南
南大通用数据技术股份有限公司
- 65 -

重要:
l
对于 multiset、set、row 和 list 数据类型,将该数据类型映射至
defaultUDTFetchType 属性集(SQL_C_CHAR 或 SQL_C_BINARY)。
l
要使得 SQL_BIGINT 能够与 SQLBindCol 和 SQLBindParameter 正确工作,您必
须使用 SQL_C_UBIGINT(其有 8 字节无符号整数的支持数据范围),而不使用
SQL_C_LONG(其有 4 字节整数的支持数据范围)。