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

Tablestore:データの読み取り

最終更新日:Dec 28, 2024

Tablestore は、データを読み取るための複数の操作を提供します。GetRow 操作を呼び出して単一のデータ行を読み取ったり、BatchGetRow 操作を呼び出して一度に複数のデータ行を読み取ったり、GetRange 操作を呼び出して主キー値が指定された範囲内にあるデータを読み取ったりできます。

クエリメソッド

Tablestore は、データを読み取るための GetRow、BatchGetRow、および GetRange 操作を提供します。データを読み取る前に、実際のクエリシナリオに基づいて適切なクエリメソッドを選択してください。

重要

自動インクリメント主キー列を含むテーブルからデータを読み取る場合は、自動インクリメント主キー列の値を含むすべての主キー列の値をクエリしていることを確認してください。詳細については、自動インクリメント主キー列の設定 を参照してください。自動インクリメント主キー列に値が記録されていない場合は、GetRange 操作を呼び出して、最初の主キー列の主キー値に基づいてデータを読み取る範囲を指定できます。

クエリメソッド

説明

シナリオ

単一のデータ行の読み取り

GetRow 操作を呼び出して、単一のデータ行を読み取ることができます。

このメソッドは、テーブルのすべての主キー列を決定でき、読み取る行数が少ないシナリオに適用できます。

複数行のデータの同時読み取り

BatchGetRow 操作を呼び出して、1 つ以上のテーブルから一度に複数のデータ行を読み取ることができます。

BatchGetRow 操作は、複数の GetRow 操作で構成されています。サブ操作を構築するプロセスは、GetRow 操作を呼び出すプロセスと同じです。

このメソッドは、テーブルのすべての主キー列を決定でき、読み取る行数が多い場合、または複数のテーブルからデータを読み取るシナリオに適用できます。

主キー値が特定の範囲内にあるデータの読み取り

GetRange 操作を呼び出して、主キー値が指定された範囲内にあるデータを読み取ることができます。

GetRange 操作を使用すると、主キー値が指定された範囲内にあるデータを前方または後方に読み取ることができます。読み取る行数を指定することもできます。範囲が広く、スキャンされた行数またはスキャンされたデータの量が上限を超えると、スキャンは停止し、読み取られた行と次の行の主キーに関する情報が返されます。前回の操作が中断したところから開始するリクエストを開始し、前回の操作によって返された次の行の主キー情報に基づいて残りの行を読み取ることができます。

このメソッドは、テーブルのすべての主キー列の範囲または主キー列のプレフィックスを決定できるシナリオに適用できます。

重要

主キー列のプレフィックスを決定できない場合は、データが INF_MIN タイプの開始主キー列とデータが INF_MAX タイプの終了主キー列を指定して、テーブルのすべての主キー列の範囲を決定できます。この操作はテーブル内のすべてのデータをスキャンしますが、大量の計算リソースを消費します。注意して進めてください。

前提条件

単一のデータ行の読み取り

GetRow 操作を呼び出して、単一のデータ行を読み取ることができます。GetRow 操作を呼び出すと、次のいずれかの結果が返される場合があります。

  • 行が存在する場合、行の主キー列と属性列が返されます。

  • 行が存在しない場合、行は返されず、エラーも報告されません。

API 操作

/**
 * データ行を読み取ります。
 * @api
 * @param [] $request リクエストパラメータ。
 * @return [] レスポンス。
 * @throws OTSClientException パラメータエラーが発生した場合、または Tablestore サーバーが検証エラーを返した場合にスローされる例外。
 * @throws OTSServerException Tablestore サーバーがエラーを返した場合にスローされる例外。
 */
public function getRow(array $request);            

リクエストパラメータ

パラメータ

説明

table_name

テーブルの名前。

primary_key

行の主キー情報。主キー情報は、主キー列名、主キ-タイプ、および主キー値で構成されます。

重要

指定する主キー列の数とタイプは、テーブル内の実際の主キー列の数とタイプと同じである必要があります。

max_versions

読み取ることができるデータバージョンの最大数。

重要

max_versions パラメータと time_range パラメータの少なくとも 1 つを指定する必要があります。

  • max_versions パラメータのみを指定した場合、指定された数のバージョンのデータが、最新のデータエントリから最も古いデータエントリまで返されます。

  • time_range パラメータのみを指定した場合、バージョンが指定された時間範囲内にあるすべてのデータ、または指定されたバージョンのデータが返されます。

  • max_versions パラメータと time_range パラメータの両方を指定した場合、指定された時間範囲内にある指定された数のバージョンのデータが、最新のデータエントリから最も古いデータエントリまで返されます。

time_range

読み取るバージョンの時間範囲、または特定のバージョン。詳細については、TimeRange を参照してください。

重要

max_versions パラメータと time_range パラメータの少なくとも 1 つを指定する必要があります。

  • max_versions パラメータのみを指定した場合、指定された数のバージョンのデータが、最新のデータエントリから最も古いデータエントリまで返されます。

  • time_range パラメータのみを指定した場合、バージョンが指定された時間範囲内にあるすべてのデータ、または指定されたバージョンのデータが返されます。

  • max_versions パラメータと time_range パラメータの両方を指定した場合、指定された時間範囲内にある指定された数のバージョンのデータが、最新のデータエントリから最も古いデータエントリまで返されます。

  • バージョンが特定の時間範囲内にあるデータをクエリするには、start_time パラメータと end_time パラメータを指定する必要があります。 start_time パラメータは開始タイムスタンプを指定します。 end_time パラメータは終了タイムスタンプを指定します。指定された範囲は、[start_time, end_time) 形式の左閉右開区間です。

  • 特定のバージョンのデータをクエリするには、specific_time パラメータを指定する必要があります。 specific_time パラメータは特定のタイムスタンプを指定します。

specific_time と [start_time, end_time) のいずれか 1 つのみが必要です。

time_range パラメータの有効な値:0 から INT64.MAX まで。単位:ミリ秒。

columns_to_get

読み取る列。主キー列または属性列の名前を指定できます。

  • 列を指定しない場合、行内のすべてのデータが返されます。

  • 列を指定したが、行に指定された列が含まれていない場合、戻り値は null です。行に指定された列の一部が含まれている場合、行の指定された列の一部にあるデータが返されます。

説明
  • デフォルトでは、Tablestore は行をクエリするときに、行のすべての列からデータを返します。 columns_to_get パラメータを使用して、特定の列からデータを返すことができます。 col0 と col1 が columns_to_get パラメータに追加されている場合、col0 列と col1 列の値のみが返されます。

  • columns_to_get パラメータと column_filter パラメータの両方を指定した場合、Tablestore は columns_to_get パラメータで指定された列をクエリし、フィルタ条件を満たす行を返します。

start_column

ワイドカラム読み取り操作を開始する列。レスポンスには開始列が含まれます。

列は名前のアルファベット順にソートされます。たとえば、テーブルに a、b、c の 3 つの列が含まれているとします。 start_column パラメータの値が b の場合、読み取り操作は列 b から開始され、列 b と c が返されます。

end_column

ワイドカラム読み取り操作が終了する列。レスポンスには終了列は含まれません。

列は名前のアルファベット順にソートされます。たとえば、テーブルに a、b、c の 3 つの列が含まれているとします。 end_column パラメータの値が b の場合、読み取り操作は列 b で終了し、列 a が返されます。

token

次のワイドカラム読み取り操作を開始する位置。このパラメータは使用できません。

column_filter

サーバー側でクエリ結果をフィルタリングするために使用するフィルタ。フィルタ条件を満たす行のみが返されます。詳細については、フィルタの使用 を参照してください。

説明

columns_to_get パラメータと column_filter パラメータの両方を指定した場合、Tablestore は columns_to_get パラメータで指定された列をクエリし、フィルタ条件を満たす行を返します。

リクエスト構文

$result = $client->getRow([
    'table_name' => '<string>',                     // テーブルの名前を指定します。
    'primary_key' => [                              // 主キー情報を指定します。
        ['<string>', <PrimaryKeyValue>],
        ['<string>', <PrimaryKeyValue>],
        ['<string>', <PrimaryKeyValue>, <PrimaryKeyType>]
    ],
    'max_versions' => <integer>,
    'time_range' => [
        'start_time' => <integer>,
        'end_time' => <integer>,
        'specific_time' => <integer>
    ],
    'start_column' => '<string>',
    'end_column' => '<string>',
    'token' => '<string>',
    'columns_to_get' => [
        '<string>',
        '<string>',
        //...
    ],
    'column_filter' =>  <ColumnCondition>
]);            

レスポンスパラメータ

パラメータ

説明

consumed

操作によって消費される容量ユニット(CU)の数。

capacity_unit:消費される読み取り/書き込み CU の数。パラメータ:

  • read:読み取りスループット。

  • write:書き込みスループット。

primary_key

リクエストで指定されたものと同じ主キー値。

説明

行が存在しない場合、primary_key パラメータには空のリスト [] が返されます。

attribute_columns

属性列。

説明

行が存在しない場合、attribute_columns パラメータには空のリスト [] が返されます。

  • 各属性列の情報は、属性列名、属性列値(ColumnValue)、属性列値タイプ(ColumnType)、およびタイムスタンプで構成されます。

    タイムスタンプは 64 ビット整数で、データのバージョンを示します。

  • レスポンスの属性列は、属性列名のアルファベット順にソートされます。属性列のバージョンは、タイムスタンプの降順にソートされます。

  • レスポンスの属性列の順序は、リクエストで指定された順序と異なる場合があります。

next_token

次のワイドカラム読み取り操作を開始する位置。このパラメータは使用できません。

レスポンス形式

[
    'consumed' => [
        'capacity_unit' => [
            'read' => <integer>,
            'write' => <integer>
        ]
    ],
    'primary_key' => [
        ['<string>', <PrimaryKeyValue>],
        ['<string>', <PrimaryKeyValue>],
        ['<string>', <PrimaryKeyValue>, <PrimaryKeyType>]
    ],
    'attribute_columns' => [
            ['<string>', <ColumnValue>, <ColumnType>, <integer>]
            ['<string>', <ColumnValue>, <ColumnType>, <integer>]
            ['<string>', <ColumnValue>, <ColumnType>, <integer>]
    ],
    'next_token' => '<string>'
]            

サンプルコード

行の指定された列から最新バージョンのデータを読み取る

次のサンプルコードは、行の指定された列から最新バージョンのデータを読み取る方法の例を示しています。

$request = [
    'table_name' => 'MyTable',
    'primary_key' => [ // 主キー情報を指定します。
        ['PK0', 123],
        ['PK1', 'abc']
    ],
    'max_versions' => 1,                     // 最新バージョンのデータを読み取るには、このパラメータを 1 に設定します。
    'columns_to_get' => ['Col0']             // 読み取る列を指定します。
];
$response = $otsClient->getRow ($request);            

フィルタを使用してデータ行を読み取る

次のサンプルコードは、フィルタを使用する場合にデータ行を読み取る方法の例を示しています。

$request = [
    'table_name' => 'MyTable',
    'primary_key' => [ // 主キー情報を指定します。
        ['PK0', 123],
        ['PK1', 'abc']
    ],
    'max_versions' => 1,                     // 最新バージョンのデータを読み取るには、このパラメータを 1 に設定します。
    'column_filter' => [                     // Col0 列の値が 0 である行を返すフィルタを設定します。
        'column_name' => 'Col0',
        'value' => 0,
        'comparator' => ComparatorTypeConst::CONST_EQUAL,
        'pass_if_missing' => false          // 行に Col0 列が含まれていない場合、行は返されません。
    ]
];
$response = $otsClient->getRow ($request);            

複数行のデータの同時読み取り

BatchGetRow 操作を呼び出して、1 つ以上のテーブルから一度に複数のデータ行を読み取ることができます。BatchGetRow 操作は、複数の GetRow 操作で構成されています。BatchGetRow 操作を呼び出す場合、各 GetRow 操作を構築するプロセスは、GetRow 操作を呼び出す場合に GetRow 操作を構築するプロセスと同じです。

BatchGetRow 操作を呼び出すと、各 GetRow 操作は個別に実行され、Tablestore は各 GetRow 操作へのレスポンスを個別に返します。

使用上の注意

  • BatchGetRow 操作を呼び出して一度に複数の行を読み取ると、一部の行の読み取りに失敗する可能性があります。この場合、Tablestore は例外を返さず、失敗した行に関する情報が含まれる BatchGetRowResponse を返します。したがって、BatchGetRow 操作を呼び出すときは、戻り値をチェックして、各行からデータが正常に読み取られたかどうかを確認する必要があります。

  • BatchGetRow 操作では、すべての行に同じパラメータ設定を使用します。たとえば、ColumnsToGet パラメータが [colA] に設定されている場合、colA 列の値のみがすべての行から読み取られます。

  • BatchGetRow 操作を呼び出して、一度に最大 100 行を読み取ることができます。

API 操作

/**
 * 指定されたデータ行を読み取ります。
 * BatchGetRow 操作を呼び出して一度に複数の行を読み取ると、一部の行の読み取りに失敗する可能性があります。この場合、システムは例外を返さず、$response で失敗した行に関する情報を返します。詳細については、BatchGetRow 操作へのサンプルレスポンスを参照してください。
 * @api
 * @param [] $request リクエストパラメータ。
 * @return [] レスポンス。
 * @throws OTSClientException パラメータエラーが発生した場合、または Tablestore サーバーが検証エラーを返した場合に返される例外。
 * @throws OTSServerException Tablestore サーバーがエラーを返した場合に返される例外。
 */
public function batchGetRow(array $request);

            

リクエストパラメータ

GetRow 操作と比較して、BatchGetRow 操作には次の変更があります。

  • テーブルの階層が作成されます。複数のテーブルからデータを一度に読み取ることができます。

    tables パラメータを使用して、読み取り操作を実行するテーブルと行に関する情報を指定できます。

  • primary_key パラメータは primary_keys パラメータに変更されます。 primary_keys パラメータを使用すると、複数の行の主キー情報を指定し、複数の行から一度にデータを読み取ることができます。

リクエスト構文

$result = $client->batchGetRow([
    'tables' => [                                            // テーブルの階層を指定します。
        [
            'table_name' => '<string>',                      // テーブルの名前を指定します。
            'primary_keys' => [                              // 主キー情報を指定します。
                [
                    ['<string>', <PrimaryKeyValue>],
                    ['<string>', <PrimaryKeyValue>],
                    ['<string>', <PrimaryKeyValue>, <PrimaryKeyType>]
                ],
                // その他のパラメータを指定します。
            ]
            'max_versions' => <integer>,
            'time_range' => [
                'start_time' => <integer>,
                'end_time' => <integer>,
                'specific_time' => <integer>
            ],
            'start_column' => '<string>',
            'end_column' => '<string>',
            'token' => '<string>',
            'columns_to_get' => [
                '<string>',
                '<string>',
                //...
            ],
            'column_filter' =>  <ColumnCondition>
        ],
        // その他のテーブルを指定します。
    ]
]);            

レスポンスパラメータ

レスポンスの tables パラメータで示される各テーブルは、リクエストで指定されたテーブルに対応しています。次の表に、レスポンスのパラメータを示します。

パラメータ

説明

table_name

テーブルの名前。

is_ok

行に対する操作が成功したかどうかを示します。

  • 値が true の場合、行が読み取られたことを示します。この場合、error パラメータは無効です。

  • 値が false の場合、行の読み取りに失敗したことを示します。この場合、consumed、primary_key、および attribute_columns パラメータは無効です。

error

行に対する操作が失敗した場合のレスポンスのエラー情報。パラメータ:

  • code:行に対する操作が失敗した場合にレスポンスで返されるエラーコード。

  • message:行に対する操作が失敗した場合にレスポンスで返されるエラーメッセージ。

consumed

操作によって消費される CU の数。

capacity_unit:消費される読み取り/書き込み CU の数。パラメータ:

  • read:読み取りスループット。

  • write:書き込みスループット。

primary_key

リクエストで指定されたものと同じ主キー値。

説明

行が存在しない場合、primary_key パラメータには空のリスト [] が返されます。

attribute_columns

属性列。

説明

行が存在しない場合、attribute_columns パラメータには空のリスト [] が返されます。

  • 各属性列の情報は、属性列名、属性列値(ColumnValue)、属性列値タイプ(ColumnType)、およびタイムスタンプで構成されます。

    タイムスタンプは 64 ビット整数で、データのバージョンを示します。

  • レスポンスの属性列は、属性列名のアルファベット順にソートされます。属性列のバージョンは、タイムスタンプの降順にソートされます。

  • レスポンスの属性列の順序は、リクエストで指定された順序と異なる場合があります。

next_token

次のワイドカラム読み取り操作を開始する位置。このパラメータは使用できません。

レスポンス形式

[
    'tables' => [
        [
            'table_name' => '<string>',
            'rows' => [
                [
                    'is_ok' => true || false,
                    'error' => [
                        'code' => '<string>',
                        'message' => '<string>',
                    ]
                    'consumed' => [
                        'capacity_unit' => [
                            'read' => <integer>,
                            'write' => <integer>
                        ]
                    ],
                    'primary_key' => [
                        ['<string>', <PrimaryKeyValue>],
                        ['<string>', <PrimaryKeyValue>],
                        ['<string>', <PrimaryKeyValue>, <PrimaryKeyType>]
                    ],
                    'attribute_columns' => [
                            ['<string>', <ColumnValue>, <ColumnType>, <integer>]
                            ['<string>', <ColumnValue>, <ColumnType>, <integer>]
                            ['<string>', <ColumnValue>, <ColumnType>, <integer>]
                    ],
                    'next_token' => '<string>'
                ],
                // その他の行。
            ]
        ],
        // その他のテーブル。
    ]
]            

サンプルコード

次のサンプルコードは、3 つのテーブルから一度に 30 行のデータを読み取る方法の例を示しています。各テーブルから 10 行が読み取られます。

// 3 つのテーブルからデータを読み取ります。各テーブルから 10 行が読み取られます。
$tables = array();
for($i = 0; $i < 3; $i++) {
    $primary_keys = array();
    for($j = 0; $j < 10; $j++) {
        $primary_keys[] = [
            ['pk0', $i],
            ['pk1', $j]
        ];
    }
    $tables[] = [
        'table_name' => 'SampleTable' . $i,
        'max_versions' => 1,
        'primary_keys' => $primary_keys
    ];
}
$request = [
    'tables' => $tables
];
$response = $otsClient->batchGetRow ($request);

// 各テーブルから返されたデータを処理します。
foreach ($response['tables'] as $tableData) {
  print "テーブル {$tableData['table_name']} を処理しています...\n";

  // テーブル内のデータの各行を処理します。
  foreach ($tableData['rows'] as $rowData) {

    if ($rowData['is_ok']) {

      // 読み取られたデータを処理します。
        $row = json_encode($rowData['primary_key']);
        print "行を処理しています: {$row}\n";

    } else {

      // エラーを処理します。
      print "エラー: {$rowData['error']['code']} {$rowData['error']['message']}\n";
    }
  }
}            

次の表に、詳細なサンプルコードの例を示します。

説明

BatchGetRow1.php

BatchGetRow 操作を呼び出してテーブルから複数の行を読み取る方法を示します。

BatchGetRow2.php

BatchGetRow 操作を呼び出して複数のテーブルから複数の行を読み取る方法を示します。

BatchGetRow3.php

BatchGetRow 操作を呼び出してテーブルから複数の行の指定された列を読み取る方法を示します。

BatchGetRow4.php

BatchGetRow 操作を呼び出して返された結果を処理する方法を示します。

BatchGetRowWithColumnFilter.php

フィルタとともに BatchGetRow 操作を呼び出す方法を示します。

主キー値が特定の範囲内にあるデータの読み取り

GetRange 操作を呼び出して、主キー値が指定された範囲内にあるデータを読み取ることができます。

GetRange 操作を使用すると、主キー値が指定された範囲内にあるデータを前方または後方に読み取ることができます。読み取る行数を指定することもできます。範囲が広く、スキャンされた行数またはスキャンされたデータの量が上限を超えると、スキャンは停止し、読み取られた行と次の行の主キーに関する情報が返されます。前回の操作が中断したところから開始するリクエストを開始し、前回の操作によって返された次の行の主キー情報に基づいて残りの行を読み取ることができます。

説明

Tablestore テーブルでは、すべての行は主キーによってソートされます。テーブルの主キーは、すべての主キー列で順番に構成されます。したがって、行は特定の主キー列に基づいてソートされません。

使用上の注意

GetRange 操作は左端一致の原則に従います。Tablestore は、最初の主キー列から最後の主キー列まで順番に値を比較して、主キー値が指定された範囲内にあるデータを読み取ります。たとえば、データテーブルの主キーが PK1、PK2、PK3 という主キー列で構成されているとします。データを読み取るとき、Tablestore は最初に、行の PK1 値が最初の主キー列に指定された範囲内にあるかどうかを判断します。行の PK1 値が範囲内にある場合、Tablestore は、行の他の主キー列の値が各主キー列に指定された範囲内にあるかどうかの判断を停止し、行を返します。行の PK1 値が範囲内にない場合、Tablestore は、PK1 と同じ方法で、行の他の主キー列の値が各主キー列に指定された範囲内にあるかどうかを判断し続けます。

次のいずれかの条件が満たされると、GetRange 操作が停止してデータが返される場合があります。

  • スキャンされたデータ量が 4 MB に達する。

  • スキャンされた行数が 5,000 に達する。

  • 返される行数が上限に達する。

  • 予約済みの読み取りスループットがすべて消費されているため、読み取りスループットが次のデータ行を読み取るのに不十分である。

API 操作

/**
 * 開始主キー情報と終了主キー情報で指定された範囲内にある主キー値を持つデータを読み取ります。
 * サーバーはこの範囲を切り捨てる場合があります。この場合、レスポンスで返される next_start_primary_key パラメータの値に基づいて、GetRange 操作を再度呼び出すかどうかを判断する必要があります。
 * 読み取る行の最大数を指定できます。
 * 開始主キー情報と終了主キー情報を指定する場合、INF_MIN を使用して最小値を指定し、INF_MAX を使用して最大値を指定できます。詳細については、次のサンプルコードを参照してください。
 * @api
 * @param [] $request リクエストパラメータ。
 * @return [] レスポンス。
 * @throws OTSClientException パラメータエラーが発生した場合、または Tablestore サーバーが検証エラーを返した場合に返される例外。
 * @throws OTSServerException Tablestore サーバーがエラーを返した場合に返される例外。
 */
public function getRange(array $request);            

パラメータ

GetRow操作と比較して、GetRange操作には次の変更点があります。

  • primary_key パラメーターは、inclusive_start_primary_key パラメーターと exclusive_end_primary_key パラメーターに変更されました。範囲は左閉右開区間です。

  • direction パラメーターが追加され、読み取り操作の方向を指定できるようになりました。

  • limit パラメーターが追加され、返される行数を制限できるようになりました。

exclusive_end_primary_key

パラメーター

説明

table_name

テーブルの名前。

inclusive_start_primary_key

読み取る範囲の開始プライマリキー情報と終了プライマリキー情報。開始プライマリキー列と終了プライマリキー列は、有効なプライマリキー列、またはデータ型がINF_MIN型とINF_MAX型の仮想列である必要があります。仮想列で指定された範囲の列数は、指定されたテーブルのプライマリキー列の数と同じである必要があります。

INF_MINは無限小の値を示します。他のすべての型の値は、INF_MIN型の値よりも大きくなります。INF_MAXは無限大の値を示します。他のすべての型の値は、INF_MAX型の値よりも小さくなります。

  • inclusive_start_primary_keyパラメーターは、開始プライマリキー列と値を指定します。行に開始プライマリキー列が含まれている場合、この行のデータが返されます。

  • exclusive_end_primary_keyパラメーターは、終了プライマリキー列と値を指定します。行に終了プライマリキー列が含まれている場合、この行のデータは返されません。

テーブルの行は、プライマリキー値に基づいて昇順にソートされます。データの読み取りに使用される範囲は、左閉右開区間です。データを順方向に読み取る場合、プライマリキー値が開始プライマリキー値以上で終了プライマリキー値未満の行が返されます。

読み取る範囲の終了プライマリキー情報。開始プライマリキー列と終了プライマリキー列は、有効なプライマリキー列、またはデータ型が INF_MIN 型と INF_MAX 型の仮想列である必要があります。仮想列で指定された範囲の列数は、指定されたテーブルのプライマリキー列の数と同じである必要があります。INF_MIN は無限小の値を示します。他のすべての型の値は、INF_MIN 型の値よりも大きくなります。INF_MAX は無限大の値を示します。他のすべての型の値は、INF_MAX 型の値よりも小さくなります。inclusive_start_primary_key パラメーターは、開始プライマリキー列と値を指定します。行に開始プライマリキー列が含まれている場合、この行のデータが返されます。exclusive_end_primary_key パラメーターは、終了プライマリキー列と値を指定します。行に終了プライマリキー列が含まれている場合、この行のデータは返されません。

テーブルの行は、プライマリキー値に基づいて昇順にソートされます。データの読み取りに使用される範囲は、左閉右開区間です。順方向にデータを読み取る場合、プライマリキー値が開始プライマリキー値以上で、終了プライマリキー値未満の行が返されます。

direction

レスポンス内の行をソートする順序。

  • このパラメーターをDirectionConst::CONST_FORWARDに設定すると、開始プライマリキー値は終了プライマリキー値よりも小さくなければならず、レスポンス内の行はプライマリキー値の昇順でソートされます。

  • このパラメーターをDirectionConst::CONST_BACKWARDに設定すると、開始プライマリキー値は終了プライマリキー値よりも大きくなければならず、レスポンス内の行はプライマリキー値の降順でソートされます。

たとえば、テーブルに2つのプライマリキー値AとBがあり、値Aは値Bよりも小さいとします。 directionパラメーターをDirectionConst::CONST_FORWARDに設定し、テーブルに[A, B)の範囲を指定すると、Tablestoreはプライマリキー値が値A以上で値B未満の行を値Aから値Bの昇順で返します。 directionパラメーターをDirectionConst::CONST_BACKWARDに設定し、テーブルに[B, A)の範囲を指定すると、Tablestoreはプライマリキー値が値B以下で値Aより大きい行を値Bから値Aの降順で返します。

limit

返される行の最大数。このパラメーターの値は0より大きい必要があります。

Tablestoreは、指定された範囲内の一部の行が返されない場合でも、順方向または逆方向に返される行の最大数に達すると操作を停止します。レスポンスで返されるnext_start_primary_keyパラメーターの値を使用して、次のリクエストでデータを読み取ることができます。

max_versions

読み取ることができるデータバージョンの最大数。

重要

max_versionsパラメーターとtime_rangeパラメーターの少なくとも1つを指定する必要があります。

  • max_versionsパラメーターのみを指定すると、指定された数のバージョンのデータが最新のデータエントリから最も古いデータエントリまで返されます。

  • time_rangeパラメーターのみを指定すると、バージョンが指定された時間範囲内にあるすべてのデータ、または指定されたバージョンのデータが返されます。

  • max_versionsパラメーターとtime_rangeパラメーターの両方を指定すると、指定された時間範囲内の指定された数のバージョンのデータが最新のデータエントリから最も古いデータエントリまで返されます。

time_range

読み取るバージョンまたは特定のバージョンの時間範囲。詳細については、TimeRangeを参照してください。

重要

max_versionsパラメーターとtime_rangeパラメーターの少なくとも1つを指定する必要があります。

  • max_versionsパラメーターのみを指定すると、指定された数のバージョンのデータが最新のデータエントリから最も古いデータエントリに返されます。

  • time_rangeパラメーターのみを指定すると、バージョンが指定された時間範囲内にあるすべてのデータ、または指定されたバージョンのデータが返されます。

  • max_versionsパラメーターとtime_rangeパラメーターの両方を指定すると、指定された時間範囲内の指定された数のバージョンのデータが最新のデータエントリから最も古いデータエントリに返されます。

  • バージョンが特定の時間範囲内にあるデータをクエリするには、start_timeパラメーターとend_timeパラメーターを指定する必要があります。 start_timeパラメーターは開始タイムスタンプを指定します。 end_timeパラメーターは終了タイムスタンプを指定します。指定された範囲は、[start_time, end_time)形式の左閉右開区間です。

  • 特定のバージョンのデータをクエリするには、specific_timeパラメーターを指定する必要があります。 specific_timeパラメーターは特定のタイムスタンプを指定します。

specific_timeと[start_time, end_time)のいずれか1つが必要です。

time_rangeパラメーターの有効な値:0~INT64.MAX。単位:ミリ秒。

columns_to_get

読み取る列。プライマリキー列または属性列の名前を指定できます。

  • 列を指定しない場合、行内のすべてのデータが返されます。

  • 列を指定したが、行に指定された列が含まれていない場合、戻り値はnullです。行に指定された列の一部が含まれている場合、行の指定された列の一部にあるデータが返されます。

説明
  • デフォルトでは、行をクエリすると、Tablestoreは行のすべての列からデータを返します。 columns_to_getパラメーターを使用して、特定の列からデータを返すことができます。 col0とcol1がcolumns_to_getパラメーターに追加されている場合、col0列とcol1列の値のみが返されます。

  • プライマリキー値に基づいて読み取るように指定した範囲に行があるが、返すように指定した列が含まれていない場合、レスポンスにはその行は含まれません。

  • columns_to_getパラメーターとcolumn_filterパラメーターの両方を指定した場合、Tablestoreはcolumns_to_getパラメーターで指定された列をクエリし、フィルター条件を満たす行を返します。

start_column

ワイドカラム読み取り操作を開始する列。レスポンスには開始列が含まれます。

列は名前のアルファベット順にソートされます。たとえば、テーブルにa、b、cの3つの列が含まれているとします。 start_columnパラメーターの値がbの場合、読み取り操作は列bから開始され、列bとcが返されます。

end_column

ワイドカラム読み取り操作を終了する列。レスポンスには終了列は含まれません。

列は名前のアルファベット順にソートされます。たとえば、テーブルにa、b、cの3つの列が含まれているとします。 end_columnパラメーターの値がbの場合、読み取り操作は列bで終了し、列aが返されます。

token

次のワイドカラム読み取り操作を開始する位置。このパラメーターは使用できません。

column_filter

サーバー側でクエリ結果をフィルタリングするために使用するフィルター。フィルター条件を満たす行のみが返されます。詳細については、フィルターの設定を参照してください。

説明

columns_to_getパラメーターとcolumn_filterパラメーターの両方を指定した場合、Tablestoreはcolumns_to_getパラメーターで指定された列をクエリし、フィルター条件を満たす行を返します。

リクエスト構文

$result = $client->getRange([
    'table_name' => '<string>',                                     // テーブル名を指定します。
    'inclusive_start_primary_key' => [                              // 開始プライマリキー情報を指定します。
        ['<string>', <PrimaryKeyValue>], 
        ['<string>', <PrimaryKeyValue>],
        ['<string>', <PrimaryKeyValue>, <PrimaryKeyType>]
    ], 
    'exclusive_end_primary_key' => [                                // 終了プライマリキー情報を指定します。
        ['<string>', <PrimaryKeyValue>], 
        ['<string>', <PrimaryKeyValue>],
        ['<string>', <PrimaryKeyValue>, <PrimaryKeyType>]
    ], 
    'direction' => <Direction>,                                     // レスポンス内の行をソートする順序を指定します。
    'limit' => <Direction>,
    'max_versions' => <integer>,
    'time_range' => [
        'start_time' => <integer>,
        'end_time' => <integer>,
        'specific_time' => <integer>
    ],
    'start_column' => '<string>',
    'end_column' => '<string>',
    'token' => '<string>',
    'columns_to_get' => [
        '<string>',
        '<string>',
        //...   
    ],
    'column_filter' =>  <ColumnCondition>
]);      

レスポンスパラメーター

パラメータ

説明

消費

操作で消費される CU の数。

capacity_unit: 消費される読み取り/書き込み CU の数。パラメーター:

  • read: 読み取りスループット。

  • write: 書き込みスループット。

table_name

テーブルの名前。

属性列

属性列。

  • 各属性列の情報は、属性列名、属性列値 (ColumnValue)、属性列値の型 (ColumnType)、およびタイムスタンプで構成されます。

    タイムスタンプは64ビット整数で、データのバージョンを示します。単位:ミリ秒。

  • レスポンス内の属性列は、属性列名でアルファベット順にソートされます。属性列のバージョンは、タイムスタンプで降順にソートされます。

  • レスポンス内の属性列の順序は、リクエストで指定された順序と異なる場合があります。

next_start_primary_key

次回の読み取りリクエストの開始プライマリキー情報です。 next_start_primary_key パラメーターの値を使用して、すべてのデータが読み取られたかどうかを判断できます。

  • レスポンスで next_start_primary_key パラメーターの値が空でない場合、その値を次回の GetRange 操作の開始プライマリキー情報として使用できます。

  • レスポンスで next_start_primary_key パラメーターの値が空の場合、範囲内のすべてのデータが返されます。

レスポンス形式

[
    'consumed' => [
        'capacity_unit' => [
            'read' => <integer>,
            'write' => <integer>
        ]
    ],
    'next_start_primary_key' => [ 
        ['<string>', <PrimaryKeyValue>], 
        ['<string>', <PrimaryKeyValue>],
        ['<string>', <PrimaryKeyValue>, <PrimaryKeyType>]
    ], 
    'rows' => [
        [
            'primary_key' => [ 
                ['<string>', <PrimaryKeyValue>], 
                ['<string>', <PrimaryKeyValue>],
                ['<string>', <PrimaryKeyValue>, <PrimaryKeyType>]
            ],  
            'attribute_columns' => [
                    ['<string>', <ColumnValue>, <ColumnType>, <integer>],
                    ['<string>', <ColumnValue>, <ColumnType>, <integer>],
                    ['<string>', <ColumnValue>, <ColumnType>, <integer>]
            ]
        ],
        // 他の行。
    ]
]
            

サンプルコード

次のサンプルコードは、プライマリキー値が指定された範囲内にあるデータを読み取る方法の例を示しています。

// PK0 列の値が [1, 4) の範囲にある行をクエリします。
// 範囲を指定するには、完全な主キー列を指定する必要があります。クエリ範囲に列の値が含まれていない場合は、列の値を無限大 (INF_MAX) または無限小 (INF_MIN) に設定します。
$startPK = [
    ['PK0', 1], 
    ['PK1', null, PrimaryKeyTypeConst::CONST_INF_MIN]  // INF_MIN は無限小の値を示します。
];
// 範囲を指定するには、完全な主キー列を指定する必要があります。クエリ範囲に列の値が含まれていない場合は、列の値を無限大 (INF_MAX) または無限小 (INF_MIN) に設定します。
$endPK = [
    ['PK0', 4], 
    ['PK1', null, PrimaryKeyTypeConst::CONST_INF_MAX]  // INF_MAX は無限大の値を示します。
];
$request = [
    'table_name' => 'SampleTable',
    'max_versions' => 1,                          // このパラメータを 1 に設定すると、最新バージョンが読み取られます。
    'direction' => DirectionConst::CONST_FORWARD, // データを順方向にクエリします。
    'inclusive_start_primary_key' => $startPK,    // 開始主キー情報を指定します。
    'exclusive_end_primary_key' => $endPK,        // 終了主キー情報を指定します。
    'limit' => 10                                 // このパラメータを 10 に設定すると、最大 10 行のデータを返すことができます。
];
$response = $otsClient->getRange ($request);
print "Read CU Consumed: {$response['consumed']['capacity_unit']['read']}\n";

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

次の表は、詳細なサンプルコードの例を示しています。

説明

GetRange1.php

GetRange 操作の呼び出し方法を示します。

GetRange2.php

指定された列を取得するための GetRange 操作の呼び出し方法を示します。

GetRange3.php

指定された行数を取得するための GetRange 操作の呼び出し方法を示します。

GetRangeWithColumnFilter.php

フィルターと共に GetRange 操作を呼び出す方法を示します。