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

Tablestore:イテレータを使用したデータの読み取り

最終更新日:Jul 01, 2025

このトピックでは、Java SDK のイテレータを使用して Tablestore からデータを読み取る方法について説明します。

前提条件

Tablestore クライアントの初期化

メソッドの説明

public Iterator<Row> createRangeIterator(RangeIteratorParameter rangeIteratorParameter) throws TableStoreException, ClientException

RangeIteratorParameter パラメーター

名前

説明

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 テーブルの各属性列には複数のバージョンを含めることができます。バージョン範囲を指定すると、この範囲内のデータのみが返されます。

maxCount (オプション)

int

イテレータを使用して読み取る行の最大数。値は 0 より大きい必要があります。

bufferSize (オプション)

int

バッファーサイズ。値は 0 より大きい必要があります。クエリ条件を満たす行数が指定されたバッファーサイズを超える場合、各クエリは指定された数の行と次の行のプライマリキーを返します。

columnsToGet (オプション)

Set<String>

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

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

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

filter (オプション)

OptionalValue<Filter>

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

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

サンプルコード

次のサンプルコードは、イテレータを使用して test_table テーブルからプライマリキー値 row1 からデータを読み取る方法を示しています。

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

    // createRangeIterator を呼び出してイテレータを取得する
    Iterator<Row> iterator = client.createRangeIterator(rangeIteratorParameter);
    while(iterator.hasNext()) {
        Row row = iterator.next();
        System.out.println(row);
    }
}

イテレータを使用してデータを読み取る際にパラメーターを設定するには、次のサンプルコードを参照できます。

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

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

    // 1 日前から現在までのデータにクエリするバージョン範囲を設定する
    rangeIteratorParameter.setTimeRange(new TimeRange(System.currentTimeMillis() - 86400*1000, System.currentTimeMillis()));
  • イテレータを使用して読み取る行の最大数を設定します。

    rangeIteratorParameter.setMaxCount(20);
  • バッファーサイズを設定します。

    rangeIteratorParameter.setBufferSize(5);
  • 読み取る属性列を指定します。

    rangeIteratorParameter.addColumnsToGet("col2");

参照