セカンダリインデックス機能を使用すると、データテーブルのプライマリキーと、データテーブルに作成されたセカンダリインデックスのインデックスカラムに基づいてデータをクエリできます。データテーブルの属性カラムを使用してデータをクエリする場合、データテーブルのセカンダリインデックスを作成してデータクエリを高速化できます。データテーブルのセカンダリインデックスを作成する際に、セカンダリインデックスのインデックスカラムまたは属性カラムを、データテーブルの作成時に指定した事前定義カラムに設定できます。セカンダリインデックスを作成した後、セカンダリインデックスを使用してデータをクエリできます。
セカンダリインデックスは、グローバルセカンダリインデックスとローカルセカンダリインデックスに分類されます。セカンダリインデックス機能の詳細については、概要 を参照してください。
CreateTableオペレーションを呼び出すことで、データテーブルの作成時に1つ以上のインデックステーブルを作成できます。詳細については、データテーブルの作成 を参照してください。
前提条件
OTSClientインスタンスが初期化されます。詳細については、OTSClientインスタンスの初期化を参照してください。
max_versionパラメータが1に設定されたデータテーブルが作成されていること。データテーブルのtime_to_liveパラメータは、以下のいずれかの条件を満たしている必要があります。詳細については、データテーブルの作成 を参照してください。
データテーブルのtime_to_liveパラメータが-1に設定されていること。これは、データテーブル内のデータが期限切れにならないことを指定します。
データテーブルのtime_to_liveパラメータが-1以外の値に設定されており、データテーブルの更新操作が禁止されていること。
データテーブルに事前定義カラムが指定されていること。
使用上の注意
インデックステーブルの名前は、既存の時系列テーブルまたはデータテーブルの名前と異なる必要があります。
セカンダリインデックスを作成すると、Tablestoreは、インデックスカラムとして指定されていないデータテーブルのプライマリキーカラムを、セカンダリインデックスのプライマリキーカラムとしてセカンダリインデックスに自動的に追加します。
ローカルセカンダリインデックスを作成する場合、インデックステーブルの最初のプライマリキーカラムは、データテーブルの最初のプライマリキーカラムと同じである必要があります。
パラメータ
パラメータ | 説明 |
main_table_name | データテーブルの名前。 |
index_meta | インデックステーブルに関するスキーマ情報。スキーマ情報には、以下の項目が含まれます。
|
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)
関連情報
セカンダリインデックスを作成した後、セカンダリインデックスを使用して、1行のデータ、またはプライマリキー値が特定の範囲内にあるデータを読み取ることができます。詳細については、セカンダリインデックスを使用したデータの読み取り を参照してください。
不要になったセカンダリインデックスを削除できます。詳細については、セカンダリインデックスの削除 を参照してください。