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

Tablestore:パラレル スキャン

最終更新日:Dec 28, 2024

クエリ結果の順序に要件がない場合は、パラレル スキャン機能を使用してクエリ結果を効率的に取得できます。

重要

Tablestore SDK for PHP V5.1.0 以降では、パラレル スキャン機能がサポートされています。パラレル スキャン機能を使用する前に、Tablestore SDK for PHP V5.1.0 以降を取得していることを確認してください。Tablestore SDK for PHP のバージョン履歴については、Tablestore SDK for PHP のバージョン履歴を参照してください。

前提条件

パラメーター

パラメーター

説明

table_name

データテーブルの名前。

index_name

検索インデックスの名前。

scan_query

query

クエリのタイプ。この操作では、Search 操作でサポートされているものと同様の、用語クエリ、あいまいクエリ、範囲クエリ、地理クエリ、およびネストされたクエリがサポートされています。

limit

各 ParallelScan 呼び出しで返されることができる行の最大数。

max_parallel

リクエストあたりのパラレル スキャン タスクの最大数。リクエストあたりのパラレル スキャン タスクの最大数は、データ量によって異なります。データ量が多いほど、リクエストあたりのパラレル スキャン タスクが多くなります。ComputeSplits 操作を使用して、リクエストあたりのパラレル スキャン タスクの最大数をクエリできます。

current_parallel_id

リクエスト内のパラレル スキャン タスクの ID。有効な値: [0, max_parallel)。

token

クエリ結果をページ分割するために使用されるトークン。ParallelScan リクエストの結果には、次のページのトークンが含まれています。トークンを使用して次のページを取得できます。

alive_time

現在のパラレル スキャン タスクの有効期間。この有効期間は、トークンの有効期間でもあります。単位: 秒。デフォルト値: 60。デフォルト値を使用することをお勧めします。有効期間内に次のリクエストが開始されない場合、それ以上のデータはクエリできません。リクエストを送信するたびに、トークンの有効時間が更新されます。

説明

ソースインデックスとカナリアインデックスのスキーマが切り替えられた場合、単一サーバーに障害が発生した場合、またはサーバーエンドの負荷分散が実行された場合、セッションは早期に期限切れになります。この場合、セッションを再作成する必要があります。

columns_to_get

クエリ条件を満たす各行について返す列の名前。

検索インデックスのすべての列を返すには、return_type パラメーターを RETURN_ALL_FROM_INDEX に設定します。

session_id

パラレル スキャン タスクのセッション ID。ComputeSplits 操作を呼び出してセッションを作成し、パラレル スキャン リクエストでサポートされているパラレル スキャン タスクの最大数をクエリできます。

次のサンプルコードは、検索インデックスのパラレル スキャン機能の使用方法の例を示しています。

// 1. セッション ID を取得します。
$computeSplitsPointReq = array(
    'table_name' => 'php_sdk_test',
    'search_index_splits_options' => array(
        'index_name' => 'test_create_search_index'
    )
);

$computeSplits = $otsClient->computeSplits($computeSplitsPointReq);
print json_encode ($computeSplits, JSON_PRETTY_PRINT);


// 2. クエリ条件を指定します。
$scanQuery = array(
    'query' => array(
        'query_type' => QueryTypeConst::MATCH_ALL_QUERY
    ),
    'limit' => 2,
    'alive_time' => 30,
    'token' => null,
    'current_parallel_id' => 0,
    'max_parallel' => 1
);

//3. ParallelScan リクエストを構築します。
$parallelScanReq = array(
    'table_name' => 'php_sdk_test',
    'index_name' => 'test_create_search_index',
    'columns_to_get' => array(
        'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, // parallel_scan では RETURN_ALL は許可されていません。RETURN_ALL_FROM_INDEX を使用してください。
        'return_names' => array('geo', 'text', 'long', 'keyword')
    ),
    'session_id' => $computeSplits['session_id'],
    'scan_query' => $scanQuery
);

$parallelScanRes = $otsClient->parallelScan($parallelScanReq);
print json_encode ($parallelScanRes['rows'], JSON_PRETTY_PRINT);

//4. トークンベースのページネーションを使用してデータをエクスポートします。この例では、行の総数のみが収集されます。
$totalCount = count($parallelScanRes['rows']);
while (!is_null($parallelScanRes['next_token'])) {
    $parallelScanReq['scan_query']['token'] = $parallelScanRes['next_token'];
    $parallelScanRes = $otsClient->parallelScan($parallelScanReq);
    print json_encode ($parallelScanRes['rows'], JSON_PRETTY_PRINT);

    $totalCount += count($parallelScanRes['rows']);
}
print "TotalCount: " . $totalCount;