使用 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);