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

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

最終更新日:Dec 28, 2024

セカンダリインデックス機能を使用すると、データテーブルのプライマリキーと、データテーブルに作成されたセカンダリインデックスのインデックスカラムに基づいてデータをクエリできます。データテーブルの属性カラムを使用してデータをクエリする場合、データテーブルのセカンダリインデックスを作成してデータクエリを高速化できます。データテーブルのセカンダリインデックスを作成する際に、セカンダリインデックスのインデックスカラムまたは属性カラムを、データテーブルの作成時に指定した事前定義カラムに設定できます。セカンダリインデックスを作成した後、セカンダリインデックスを使用してデータをクエリできます。

説明
  • セカンダリインデックスは、グローバルセカンダリインデックスとローカルセカンダリインデックスに分類されます。セカンダリインデックス機能の詳細については、概要 を参照してください。

  • CreateTableオペレーションを呼び出すことで、データテーブルの作成時に1つ以上のインデックステーブルを作成できます。詳細については、データテーブルの作成 を参照してください。

前提条件

  • OTSClientインスタンスが初期化されます。詳細については、OTSClientインスタンスの初期化を参照してください。

  • max_versionパラメータが1に設定されたデータテーブルが作成されていること。データテーブルのtime_to_liveパラメータは、以下のいずれかの条件を満たしている必要があります。詳細については、データテーブルの作成 を参照してください。

    • データテーブルのtime_to_liveパラメータが-1に設定されていること。これは、データテーブル内のデータが期限切れにならないことを指定します。

    • データテーブルのtime_to_liveパラメータが-1以外の値に設定されており、データテーブルの更新操作が禁止されていること。

  • データテーブルに事前定義カラムが指定されていること。

使用上の注意

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

  • セカンダリインデックスを作成すると、Tablestoreは、インデックスカラムとして指定されていないデータテーブルのプライマリキーカラムを、セカンダリインデックスのプライマリキーカラムとしてセカンダリインデックスに自動的に追加します。

  • ローカルセカンダリインデックスを作成する場合、インデックステーブルの最初のプライマリキーカラムは、データテーブルの最初のプライマリキーカラムと同じである必要があります。

パラメータ

パラメータ

説明

main_table_name

データテーブルの名前。

index_meta

インデックステーブルに関するスキーマ情報。スキーマ情報には、以下の項目が含まれます。

  • index_name:インデックステーブルの名前。

  • primary_key_names:インデックステーブルのプライマリキー。プライマリキーは、すべてのプライマリキーカラムと、データテーブルのランダムな数の事前定義カラムの組み合わせです。

    ローカルセカンダリインデックスを作成する場合、インデックステーブルの最初のプライマリキーカラムは、データテーブルの最初のプライマリキーカラムと同じである必要があります。

  • defined_column_names:インデックステーブルの属性カラム。属性カラムは、データテーブルの事前定義カラムの組み合わせです。

  • index_type:インデックステーブルのタイプ。有効な値:IT_GLOBAL_INDEX および IT_LOCAL_INDEX。

    • index_typeパラメータを指定しない場合、またはindex_typeパラメータをIT_GLOBAL_INDEXに設定した場合、グローバルセカンダリインデックスが作成されます。

      Tablestoreは、データテーブルのインデックス付きカラムとプライマリキーカラムから、作成するインデックステーブルのカラムにデータを非同期モードで自動的に同期します。同期のレイテンシは数ミリ秒以内です。

    • index_typeパラメータをIT_LOCAL_INDEXに設定した場合、ローカルセカンダリインデックスが作成されます。

      Tablestoreは、データテーブルのインデックス付きカラムとプライマリキーカラムから、作成するインデックステーブルのカラムにデータを同期モードで自動的に同期します。データがデータテーブルに書き込まれた後、すぐにインデックステーブルのデータをクエリできます。

include_base_data

データテーブルの既存のデータをインデックステーブルに含めるかどうかを指定します。

include_base_dataパラメータをtrueに設定すると、インデックステーブルには既存のデータが含まれます。 include_base_dataパラメータをfalseに設定すると、インデックステーブルには既存のデータは含まれません。

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

次のサンプルコードは、データテーブルのセカンダリインデックスを作成する方法の例を示しています。この例では、データテーブルのプライマリキーカラムはpk1とpk2です。セカンダリインデックスに指定されているプライマリキーカラムはdefinedcol1とpk1です。セカンダリインデックスに指定されている属性カラムはdefinedcol2とdefinedcol3です。

# インデックステーブルのメタデータを指定します。
# インデックステーブルの名前、プライマリキーカラム、属性カラムを順番に指定します。
index_meta = SecondaryIndexMeta('<INDEX_NAME>', ['definedcol1', 'pk1'], ['definedcol2', 'definedcol3'])
# データテーブルの名前を指定し、インデックステーブルにデータテーブルの既存のデータを含めないことを指定します。
client.create_secondary_index('<TABLE_NAME>', index_meta, False)
# データテーブルの名前を指定し、インデックステーブルにデータテーブルの既存のデータを含めることを指定します。
# インデックステーブルを作成した後、データテーブルの既存のデータはインデックステーブルに同期されます。既存のデータが同期された後、インデックステーブルを使用してデータテーブルのすべてのデータをクエリできます。同期に必要な時間は、同期するデータ量によって異なります。
# client.create_secondary_index('<TABLE_NAME>', index_meta, True)

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

次のサンプルコードは、データテーブルのセカンダリインデックスを作成する方法の例を示しています。この例では、データテーブルのプライマリキーカラムはpk1とpk2です。セカンダリインデックスに指定されているプライマリキーカラムはdefinedcol1とpk1です。セカンダリインデックスに指定されている属性カラムはdefinedcol2とdefinedcol3です。

# インデックステーブルのメタデータを指定します。
# インデックステーブルの名前、プライマリキーカラム、属性カラム、およびタイプを順番に指定します。
# ローカルセカンダリインデックスの最初のプライマリキーカラムは、データテーブルの最初のプライマリキーカラムと同じである必要があります。
index_meta = SecondaryIndexMeta('<INDEX_NAME>', ['pk1', 'definedcol1'], ['definedcol2', 'definedcol3'],index_type= SecondaryIndexType.LOCAL_INDEX)
# データテーブルの名前を指定し、インデックステーブルにデータテーブルの既存のデータを含めないことを指定します。
client.create_secondary_index('<TABLE_NAME>', index_meta, False)
# データテーブルの名前を指定し、インデックステーブルにデータテーブルの既存のデータを含めることを指定します。
# インデックステーブルを作成した後、データテーブルの既存のデータはインデックステーブルに同期されます。既存のデータが同期された後、インデックステーブルを使用してデータテーブルのすべてのデータをクエリできます。同期に必要な時間は、同期するデータ量によって異なります。
# client.create_secondary_index('<TABLE_NAME>', index_meta, True)

関連情報