すべてのプロダクト
Search
ドキュメントセンター

Tablestore:セカンダリインデックスの作成

最終更新日:Jul 30, 2026

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 (必須)

String

データテーブルの名前。

indexMeta (必須)

IndexMeta

インデックステーブルのスキーマ情報。

includeBaseData (必須)

boolean

インデックステーブルにデータテーブルの既存のデータを含めるかどうかを指定します。このパラメーターを true に設定すると、既存のデータが同期されます。同期の持続時間はデータ量によって異なります。このパラメーターを false に設定すると、インデックスの作成後に書き込まれたデータのみが同期されます。

インデックススキーマ

indexMetaIndexMeta 型で、次のパラメーターが含まれます:

名前

説明

indexName (必須)

String

インデックステーブルの名前。名前は、既存のデータテーブルまたは時系列テーブルの名前と異なる必要があります。

primaryKey (必須)

List<String>

インデックスキー列名の順序付きリスト。1〜4 列を指定します。列には、データテーブルのプライマリキー列または事前定義列を指定できます。Tablestore は、列が追加された順序を使用し、指定されていないデータテーブルのプライマリキー列をインデックスのプライマリキーの末尾に自動的に追加します。ローカルセカンダリインデックスの場合、最初のインデックスのプライマリキー列は、データテーブルの最初のプライマリキー列と同じである必要があります。

definedColumns (任意)

List<String>

インデックステーブルの属性列名のリスト。データテーブルの事前定義列のみ指定できます。

indexType (任意)

IndexType

インデックスのタイプ。有効な値は IT_GLOBAL_INDEXIT_LOCAL_INDEX です。デフォルト値: IT_GLOBAL_INDEX

indexUpdateMode (任意)

IndexUpdateMode

インデックスの更新モード。グローバルセカンダリインデックスでは IUM_ASYNC_INDEX を使用する必要があります。Tablestore は、インデックスキー列とプライマリキー列のデータを非同期に同期し、同期遅延は通常ミリ秒レベルです。ローカルセカンダリインデックスでは IUM_SYNC_INDEX を使用する必要があります。Tablestore はインデックスを同期的に更新し、データがデータテーブルに書き込まれた後、インデックステーブルからデータをクエリできます。デフォルト値: IUM_ASYNC_INDEX

利用シーンの例

ローカルセカンダリインデックスの作成

ローカルセカンダリインデックスを作成するには、データテーブルの最初のプライマリキー列を最初のインデックスのプライマリキー列として指定し、インデックスのタイプと更新モードをそれぞれ IT_LOCAL_INDEXIUM_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);