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

Tablestore:プライマリキー値が指定された範囲内にあるデータを読み取ります

最終更新日:Jul 01, 2025

このトピックでは、Java SDK を使用して、Tablestore からプライマリキー値が指定された範囲内にあるデータを読み取る方法について説明します。

前提条件

Tablestore クライアントの初期化

メソッドの説明

public GetRangeResponse getRange(GetRangeRequest getRangeRequest) throws TableStoreException, ClientException

GetRangeRequest パラメーター

  • rangeRowQueryCriteria (必須) RangeRowQueryCriteria: 範囲読み取り操作に関する情報。以下のパラメーターが含まれます。

    名前

    タイプ

    説明

    tableName (必須)

    String

    テーブルの名前。

    inclusiveStartPrimaryKey (必須)

    PrimaryKey

    開始プライマリキーに関する情報。プライマリキー列名とプライマリキー値が含まれます。

    • 応答には、開始プライマリキーが含まれます

    • プライマリキーの数とタイプは、テーブルのプライマリキーと一致している必要があります。

    • データを正方向に読み取る場合、開始プライマリキーは終了プライマリキーよりも小さくなければなりません。

    • データを逆方向に読み取る場合、開始プライマリキーは終了プライマリキーよりも大きくなければなりません。

    • PrimaryKeyValue.INF_MIN は最小値を示します。PrimaryKeyValue.INF_MAX は最大値を示します。

    exclusiveEndPrimaryKey (必須)

    PrimaryKey

    終了プライマリキーに関する情報。プライマリキー列名とプライマリキー値が含まれます。

    • 応答には、終了プライマリキーは含まれません

    • プライマリキーの数とタイプは、テーブルのプライマリキーと一致している必要があります。

    • PrimaryKeyValue.INF_MIN は最小値を示します。PrimaryKeyValue.INF_MAX は最大値を示します。

    direction (オプション)

    Direction

    データを読み取る方向。

    • FORWARD: デフォルト値。データを正方向に読み取ります。

    • BACKWARD: データを逆方向に読み取ります。

    maxVersions (オプション)

    OptionalValue<Integer>

    バージョンの最大数。

    • バージョンの最大数またはバージョン範囲のいずれかを設定する必要があります。

    • クエリ条件を満たすバージョンの数が指定された最大バージョン数を超える場合、指定された数のバージョンのデータがバージョン番号の降順で返されます。

    timeRange (オプション)

    OptionalValue<TimeRange>

    読み取るバージョンの範囲。

    • バージョンの最大数またはバージョン範囲のいずれかを設定する必要があります。

    • Tablestore データテーブルの各属性列は複数のバージョンを持つことができます。バージョン範囲を設定すると、バージョン範囲内のデータのみが返されます。

    limit (オプション)

    int

    1 回の操作で返す行の最大数。値は 0 より大きくなければなりません。クエリ条件を満たす行の数が指定された値を超える場合、指定された最大行数と次のクエリのプライマリキー値が返されます。

    columnsToGet (オプション)

    Set<String>

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

    • columnsToGet を設定しない場合、行全体が返されます。

    • columnsToGet を設定し、行に指定された列が含まれていない場合、行は返されません。

    filter (オプション)

    OptionalValue<Filter>

    フィルター条件。詳細については、「フィルター」をご参照ください。

    • columnsToGet と filter の両方を設定した場合、最初に columnsToGet 条件を満たす行がフィルタリングされ、次に filter 条件が適用されます。

サンプルコード

次のサンプルコードは、プライマリキー値が row1 より大きい test_table テーブルからデータを読み取ります。

public static void getRangeExample(SyncClient client) {
    // クエリ条件を構築する
    RangeRowQueryCriteria rangeRowQueryCriteria = new RangeRowQueryCriteria("test_table");
    // クエリの開始プライマリキーを設定する
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
    rangeRowQueryCriteria.setInclusiveStartPrimaryKey(primaryKeyBuilder.build());
    // 終了プライマリキーを設定する。結果は終了プライマリキーを含まない
    primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.INF_MAX);
    rangeRowQueryCriteria.setExclusiveEndPrimaryKey(primaryKeyBuilder.build());
    // クエリバージョンを設定する
    rangeRowQueryCriteria.setMaxVersions(1);

    // getRange メソッドを呼び出してデータをクエリする
    GetRangeRequest getRangeRequest = new GetRangeRequest(rangeRowQueryCriteria);
    GetRangeResponse getRangeResponse = client.getRange(getRangeRequest);

    // 応答を処理する
    System.out.println("RequestId: " + getRangeResponse.getRequestId());
    System.out.println("Read CU Cost: " + getRangeResponse.getConsumedCapacity().getCapacityUnit().getReadCapacityUnit());
    System.out.println("Write CU Cost: " + getRangeResponse.getConsumedCapacity().getCapacityUnit().getWriteCapacityUnit());
    for(Row row : getRangeResponse.getRows())
        System.out.println(row);
}

1 回の範囲読み取り操作でスキャンできるデータの最大量は、5,000 行または 4 MB です。制限を超えた場合、次の読み取り操作のプライマリキー値が返されます。反復クエリについては、次のコードを参照できます。

while(true) {
    GetRangeRequest getRangeRequest = new GetRangeRequest(rangeRowQueryCriteria);
    GetRangeResponse getRangeResponse = client.getRange(getRangeRequest);

    // 応答を処理する
    System.out.println("RequestId: " + getRangeResponse.getRequestId());
    System.out.println("Read CU Cost: " + getRangeResponse.getConsumedCapacity().getCapacityUnit().getReadCapacityUnit());
    System.out.println("Write CU Cost: " + getRangeResponse.getConsumedCapacity().getCapacityUnit().getWriteCapacityUnit());
    for(Row row : getRangeResponse.getRows())
        System.out.println(row);
    System.out.println("Rows Count: " + getRangeResponse.getRows().size());

    // 次の読み取り操作の開始プライマリキーを設定する
    if(getRangeResponse.getNextStartPrimaryKey() != null)
        rangeRowQueryCriteria.setInclusiveStartPrimaryKey(getRangeResponse.getNextStartPrimaryKey());
    else break;
}

また、データをクエリする際に、次の設定を構成するための次のサンプルコードも参照できます。

  • データを読み取る方向を設定します。

    // データを逆方向に読み取るように設定する
    rangeRowQueryCriteria.setDirection(Direction.BACKWARD);
    // 開始プライマリキーを設定する。データを逆方向に読み取る場合、開始プライマリキーは終了プライマリキーよりも大きくなければならない
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.INF_MAX);
    rangeRowQueryCriteria.setInclusiveStartPrimaryKey(primaryKeyBuilder.build());
    // 終了プライマリキーを設定する。結果は終了プライマリキーを含まない
    primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
    rangeRowQueryCriteria.setExclusiveEndPrimaryKey(primaryKeyBuilder.build());
  • 読み取るデータのバージョン範囲を設定します。バージョン範囲内のデータのみが返されます。

    // クエリするデータのバージョン範囲を現在の時刻の 1 日前に設定する
    rangeRowQueryCriteria.setTimeRange(new TimeRange(System.currentTimeMillis() - 86400*1000, System.currentTimeMillis()));
  • 読み取る属性列を指定します。

    rangeRowQueryCriteria.addColumnsToGet("col2");
  • 1 回の操作で返す行の最大数を設定します。

    rangeRowQueryCriteria.setLimit(10);

関連情報