Tablestore SDK for Java を使用して、既存のデータテーブルにグローバルセカンダリインデックスまたはローカルセカンダリインデックスを作成します。
前提条件
-
Tablestore SDK for Java をインストールし、クライアントを初期化しておきます。
-
データテーブルの
maxVersions値が 1 で、かつtimeToLive値が -1 の場合、UpdateRowの呼び出しではデータを更新できません。 -
プライマリキー列以外の列をインデックスキー列または属性列として使用する場合は、それらの列を事前定義列として設定する必要があります。
説明
セカンダリインデックスは、データテーブルのプライマリキー列と事前定義列で構成される異なるプライマリキースキーマを使用して、追加のクエリディメンションを提供します。セカンダリインデックスは、グローバルセカンダリインデックスとローカルセカンダリインデックスに分類されます。この 2 種類のインデックスは、データ同期モードとプライマリキーの要件が異なります。詳細については、「概要」をご参照ください。
既存のデータテーブルにセカンダリインデックスを作成するには、createIndex を呼び出します。データテーブルと同時に 1 つ以上のセカンダリインデックスを作成するには、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 列を指定します。列には、データテーブルのプライマリキー列または事前定義列を指定できます。Tablestore は、列が追加された順序を使用し、指定されていないデータテーブルのプライマリキー列をインデックスのプライマリキーの末尾に自動的に追加します。ローカルセカンダリインデックスの場合、最初のインデックスのプライマリキー列は、データテーブルの最初のプライマリキー列と同じである必要があります。 |
|
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);