セカンダリインデックス機能を使用すると、データテーブルのプライマリキーと、データテーブルに作成されたセカンダリインデックスのインデックスカラムに基づいてデータをクエリできます。データテーブルの属性カラムを使用してデータをクエリする必要がある場合は、データテーブルのセカンダリインデックスを作成してデータクエリを高速化できます。データテーブルのセカンダリインデックスを作成するときは、セカンダリインデックスのインデックスカラムまたは属性カラムを、データテーブルの作成時に指定した事前定義カラムに設定できます。セカンダリインデックスを作成したら、セカンダリインデックスを使用してデータをクエリできます。
セカンダリインデックスは、グローバルセカンダリインデックスとローカルセカンダリインデックスに分類されます。セカンダリインデックス機能の詳細については、セカンダリインデックス を参照してください。
CreateTable オペレーションを呼び出すことで、データテーブルを作成するときに 1 つ以上のインデックステーブルを作成できます。詳細については、データテーブルを作成する を参照してください。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスを初期化する を参照してください。
max_versions パラメータが 1 に設定されているデータテーブルが作成されていること。データテーブルの time_to_live パラメータは、次のいずれかの条件を満たしている必要があります:
データテーブルの time_to_live パラメータが -1 に設定されていること。これは、データテーブル内のデータが期限切れにならないことを意味します。
データテーブルの time_to_live パラメータが -1 以外の値に設定されており、データテーブルの更新操作が禁止されていること。
データテーブルに事前定義カラムが指定されていること。
使用上の注意
インデックステーブルの名前は、既存の時系列テーブルまたはデータテーブルの名前とは異なる名前にする必要があります。
セカンダリインデックスを作成すると、Tablestore は、インデックスカラムとして指定されていないデータテーブルのプライマリキーカラムを、セカンダリインデックスのプライマリキーカラムとしてセカンダリインデックスに自動的に追加します。
ローカルセカンダリインデックスを作成する場合、インデックステーブルの最初のプライマリキーカラムは、データテーブルの最初のプライマリキーカラムと同じである必要があります。
API 操作
/**
* セカンダリインデックスを作成します。
* @api
*
* @param [] $request
* リクエストパラメータ。データテーブルの名前です。
* @return [] レスポンス。
* @throws OTSClientException パラメータエラーが発生した場合、または Tablestore サーバーが検証エラーを返した場合に返される例外。
* @throws OTSServerException Tablestore サーバーがエラーを返した場合に返される例外。
* @example "src/examples/CreateIndex.php"
*/
public function createIndex(array $request)
パラメータ
パラメータ | 説明 |
table_name | データテーブルの名前。 |
index_meta | インデックステーブルに関するスキーマ情報。スキーマ情報には、次の項目が含まれます。
|
include_base_data | データテーブルの既存のデータをインデックステーブルに含めるかどうかを指定します。デフォルト値: false。
|
例
グローバルセカンダリインデックスを作成する
セカンダリインデックスを作成するときに index_type パラメータと index_update_mode パラメータを指定しない場合、グローバルセカンダリインデックスが作成されます。
$request = array(
'table_name' => '<TABLE_NAME>', // データテーブルの名前を指定します。
//'include_base_data' => true, // include_base_data パラメータを true に設定して、データテーブルの既存のデータをインデックステーブルに含めます。
'index_meta' => array(
'name' => '<INDEX_NAME>', // インデックステーブルの名前を指定します。
'primary_key' => array('Col1'), // インデックステーブルのプライマリキーカラムを指定します。
'defined_column' => array('Col2') // インデックステーブルの属性カラムを指定します。
)
);
$otsClient->createIndex($request);
index_type パラメータと index_update_mode パラメータを指定してグローバルセカンダリインデックスを作成することもできます。
$request = array(
'table_name' => '<TABLE_NAME>', // データテーブルの名前を指定します。
//'include_base_data' => true, // include_base_data パラメータを true に設定して、データテーブルの既存のデータをインデックステーブルに含めます。
'index_meta' => array(
'name' => '<INDEX_NAME>', // インデックステーブルの名前を指定します。
'primary_key' => array('Col1'), // インデックステーブルのプライマリキーカラムを指定します。
'defined_column' => array('Col2') // インデックステーブルの属性カラムを指定します。
'index_type' => IndexTypeConst::GLOBAL_INDEX,
'index_update_mode' => IndexUpdateModeConst::ASYNC_INDEX
)
);
$otsClient->createIndex($request);
ローカルセカンダリインデックスを作成する
次のサンプルコードは、ローカルセカンダリインデックスを作成する方法の例を示しています。
$createLocalRequest = array (
'table_name' => '<TABLE_NAME>', // データテーブルの名前を指定します。
//'include_base_data' => true, // include_base_data パラメータを true に設定して、データテーブルの既存のデータをインデックステーブルに含めます。
'index_meta' => array (
'name' => '<INDEX_NAME>', // インデックステーブルの名前を指定します。
'primary_key' => array('PK0', 'Col1'), // インデックステーブルのプライマリキーカラムを指定します。インデックステーブルの最初のプライマリキーカラムは、データテーブルの最初のプライマリキーカラムと同じである必要があります。
'defined_column' => array('Col2') // インデックステーブルの属性カラムを指定します。
'index_type' => IndexTypeConst::LOCAL_INDEX,
'index_update_mode' => IndexUpdateModeConst::SYNC_INDEX
)
);
$otsClient->createIndex($createLocalRequest);
関連情報
セカンダリインデックスを作成したら、セカンダリインデックスを使用して、1 行のデータ、またはプライマリキー値が特定の範囲内にあるデータを読み取ることができます。詳細については、セカンダリインデックスを使用してデータを読み取る を参照してください。
不要になったセカンダリインデックスを削除できます。詳細については、セカンダリインデックスを削除する を参照してください。