Tablestoreでは、インデックステーブルから単一のデータ行、またはプライマリキー値が特定の範囲内にあるデータを読み取ることができます。インデックステーブルに返したい属性列が含まれている場合は、インデックステーブルを読み取ってデータを取得できます。そうでない場合は、インデックステーブルが作成されたデータテーブルからデータをクエリする必要があります。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化を参照してください。
セカンダリインデックスが作成されていること。詳細については、セカンダリインデックスの作成を参照してください。
使用上の注意
インデックステーブルは、データの読み取りにのみ使用できます。
ローカルセカンダリインデックスの最初のプライマリキー列は、データテーブルの最初のプライマリキー列と同じである必要があります。
返したい属性列がインデックステーブルに含まれていない場合は、必要な属性列を取得するために、インデックステーブルが作成されたデータテーブルからデータをクエリする必要があります。
単一のデータ行を読み取る
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 クエリを参照してください。