使用 Java SDK 为已有数据表创建全局二级索引或本地二级索引。
前提条件
-
安装Tablestore Java SDK并初始化客户端。
-
目标数据表的最大版本数为 1,并且数据生命周期为 -1,或者已禁止通过
UpdateRow更新数据。 -
如果将非主键列作为索引列或属性列,已将这些列设置为预定义列。
功能说明
二级索引通过重新组合数据表的主键列和预定义列,为数据表提供不同于原主键的查询维度。二级索引分为全局二级索引和本地二级索引,两种索引的数据同步方式和主键要求不同。更多信息,请参见二级索引。
调用 createIndex 为已有数据表创建二级索引。如果需要在创建数据表时同时创建一个或多个二级索引,可在 createTable 请求中配置索引结构。具体操作,请参见创建数据表。
public CreateIndexResponse createIndex(CreateIndexRequest createIndexRequest)
throws TableStoreException, ClientException
以下示例为 example_table 创建全局二级索引 example_global_index。索引表包含存量数据。
IndexMeta indexMeta = new IndexMeta("example_global_index");
indexMeta.addPrimaryKeyColumn("category");
indexMeta.addDefinedColumn("status");
CreateIndexRequest request =
new CreateIndexRequest("example_table", indexMeta, true);
client.createIndex(request);
参数说明
CreateIndexRequest 包含以下参数:
|
名称 |
类型 |
说明 |
|
mainTableName(必选) |
|
数据表名称。 |
|
indexMeta(必选) |
|
索引表的结构信息。 |
|
includeBaseData(必选) |
|
索引表是否包含数据表中的存量数据。设置为 |
索引结构
indexMeta 的类型为 IndexMeta,包含以下参数:
|
名称 |
类型 |
说明 |
|
indexName(必选) |
|
索引表名称,不能与已有的数据表或时序表名称相同。 |
|
primaryKey(必选) |
|
索引列名称的有序列表,可以包含数据表主键列和预定义列,需指定 1~4 列。系统按照添加顺序设置索引表主键,并将未指定为索引列的数据表主键自动补充到索引表主键的末尾。创建本地二级索引时,第一列索引主键必须与数据表的第一列主键相同。 |
|
definedColumns(可选) |
|
索引表的属性列名称列表,只能包含数据表的预定义列。 |
|
indexType(可选) |
|
索引类型。取值为 |
|
indexUpdateMode(可选) |
|
索引更新模式。全局二级索引必须使用 |
场景示例
创建本地二级索引
创建本地二级索引时,将数据表的第一列主键作为第一列索引主键,并将索引类型和更新模式分别设置为 IT_LOCAL_INDEX 和 IUM_SYNC_INDEX。
IndexMeta indexMeta = new IndexMeta("example_local_index");
indexMeta.addPrimaryKeyColumn("user_id");
indexMeta.addPrimaryKeyColumn("category");
indexMeta.addDefinedColumn("status");
indexMeta.setIndexType(IndexType.IT_LOCAL_INDEX);
indexMeta.setIndexUpdateMode(IndexUpdateMode.IUM_SYNC_INDEX);
CreateIndexRequest request =
new CreateIndexRequest("example_table", indexMeta, true);
client.createIndex(request);