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

Tablestore:セカンダリインデックスを使用してデータを読み取る

最終更新日:Dec 28, 2024

Tablestoreでは、インデックステーブルから単一のデータ行、またはプライマリキー値が特定の範囲内にあるデータを読み取ることができます。インデックステーブルに返したい属性列が含まれている場合は、インデックステーブルを読み取ってデータを取得できます。そうでない場合は、インデックステーブルが作成されたデータテーブルからデータをクエリする必要があります。

前提条件

使用上の注意

  • インデックステーブルは、データの読み取りにのみ使用できます。

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

  • 返したい属性列がインデックステーブルに含まれていない場合は、必要な属性列を取得するために、インデックステーブルが作成されたデータテーブルからデータをクエリする必要があります。

単一のデータ行を読み取る

GetRow オペレーションを呼び出して、単一のデータ行を読み取ることができます。詳細については、単一のデータ行を読み取るを参照してください。

パラメーター

GetRow オペレーションを呼び出してインデックステーブルからデータを読み取る場合は、次の点に注意してください。

  • table_name パラメーターをインデックステーブルの名前に設定する必要があります。

  • Tablestore は、インデックス列として指定されていないデータテーブルのプライマリキー列を、インデックステーブルのプライマリキー列としてインデックステーブルに自動的に追加します。したがって、インデックステーブルの行のプライマリキー列を指定する場合は、インデックステーブルを作成する際に基づいたインデックス列と、データテーブルのプライマリキー列を指定する必要があります。

次のサンプルコードは、行のプライマリキーに基づいてインデックステーブルのデータ行を読み取る方法の例を示しています。

$request = [
 'table_name' => '<INDEX_NAME>', // インデックステーブルの名前を指定します。
 'primary_key' => [ // データを読み取る行のプライマリキーを指定します。ローカルセカンダリインデックスからデータを読み取る場合は、インデックステーブルの最初のプライマリキー列は、データテーブルの最初のプライマリキー列と同じである必要があります。
 ['PK0', 123],
 ['Col1', "abc"],
 ['PK1', 'abc']
 ],
 'max_versions' => 1, // 最新バージョンのデータを読み取ることを指定します。
 'columns_to_get' => ['Col1'] // 返す属性列を指定します。
];
$response = $otsClient->getRow($request); 

プライマリキー値が特定の範囲内にあるデータを読み取る

GetRange オペレーションを呼び出して、プライマリキー値が特定の範囲内にあるデータを読み取ることができます。詳細については、プライマリキー値が特定の範囲内にあるデータを読み取るを参照してください。

パラメーター

GetRange オペレーションを呼び出してインデックステーブルからデータを読み取る場合は、次の点に注意してください。

  • table_name パラメーターをインデックステーブルの名前に設定する必要があります。

  • Tablestore は、インデックス列として指定されていないデータテーブルのプライマリキー列を、インデックステーブルのプライマリキー列としてインデックステーブルに自動的に追加します。したがって、クエリする範囲の開始プライマリキーと終了プライマリキーを指定する場合は、インデックステーブルを作成する際に基づいたインデックス列と、データテーブルのプライマリキー列を指定する必要があります。

次のサンプルコードは、インデックステーブルからプライマリキー値が特定の範囲内にあるデータを読み取る方法の例を示しています。

// PK0 列の値が [1, 4) の範囲にある行をクエリします。
// 範囲を指定する場合は、すべてのプライマリキー列の値を指定する必要があります。範囲に列の値が含まれていない場合は、列の値を無限大の値 (INF_MAX) または無限小の値 (INF_MIN) に設定します。
// ローカルセカンダリインデックスからデータを読み取る場合は、インデックステーブルの最初のプライマリキー列は、データテーブルの最初のプライマリキー列と同じである必要があります。
$startPK = [
 ['Col1', "abc"], 
 ['PK0', null, PrimaryKeyTypeConst::CONST_INF_MIN] // INF_MIN は最小値を示します。
 ['PK1', null, PrimaryKeyTypeConst::CONST_INF_MIN] // INF_MIN は最小値を示します。
];
// 範囲を指定する場合は、すべてのプライマリキー列の値を指定する必要があります。範囲に列の値が含まれていない場合は、列の値を無限大の値 (INF_MAX) または無限小の値 (INF_MIN) に設定します。
$endPK = [
 ['Col1', "abc"],
 ['PK0', null, PrimaryKeyTypeConst::CONST_INF_MAX] // INF_MAX は最大値を示します。
 ['PK1', null, PrimaryKeyTypeConst::CONST_INF_MAX] // INF_MAX は最大値を示します。
];
$request = [
 'table_name' => '<INDEX_NAME>', // インデックステーブルの名前を指定します。
 'max_versions' => 1, // 最新バージョンのデータを読み取ることを指定します。
 'direction' => DirectionConst::CONST_FORWARD, // 順方向にデータをクエリします。
 'inclusive_start_primary_key' => $startPK, // 開始プライマリキーを指定します。
 'exclusive_end_primary_key' => $endPK, // 終了プライマリキーを指定します。
 'limit' => 10 // 最大 10 行のデータを返すことを指定します。
];
$response = $otsClient->getRange ($request);
print "Read CU Consumed: {$response['consumed']['capacity_unit']['read']}\n";

foreach ($response['rows'] as $rowData) {
 // 各データ行を処理します。
} 

FAQ

参考資料

  • ビジネスに多次元クエリとデータ分析が必要な場合は、検索インデックスを作成し、必要な属性を検索インデックスのフィールドとして指定できます。その後、検索インデックスを使用してデータのクエリと分析を実行できます。たとえば、検索インデックスを使用して、非プライマリキー列、ブールクエリ、あいまいクエリに基づいてクエリを実行できます。また、検索インデックスを使用して、最大値と最小値を取得したり、行数の統計を収集したり、クエリ結果をグループ化したりすることもできます。詳細については、検索インデックスを参照してください。

  • SQL ステートメントを実行してデータのクエリと分析を実行する場合は、SQL クエリ機能を使用できます。詳細については、SQL クエリを参照してください。