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

Tablestore:複数のデータ行を同時に読み取る

最終更新日:Jul 01, 2025

このトピックでは、Java SDK を使用して Tablestore から複数のデータ行を読み取る方法について説明します。複数のテーブルからデータをクエリできます。

注意事項

1 回のバッチ読み取り操作で最大 100 行のデータを読み取ることができます。

前提条件

Tablestore クライアントの初期化

メソッド

public BatchGetRowResponse batchGetRow(BatchGetRowRequest batchGetRowRequest) throws TableStoreException, ClientException

BatchGetRowRequest パラメーター

  • criteriasGroupByTable (必須) Map<String, MultiRowQueryCriteria>: バッチ読み取り操作に関する情報。MultiRowQueryCriteria には、次のパラメーターが含まれます。

    説明

    複数のテーブルからデータをクエリする場合、1 つの MultiRowQueryCriteria オブジェクトが 1 つのテーブルに対応します。MultiRowQueryCriteria オブジェクト内のすべての行で、同じクエリ条件が使用されます。

    名前

    タイプ

    説明

    tableName (必須)

    String

    テーブルの名前。

    rowKeys (必須)

    List<PrimaryKey>

    プライマリキーのリスト。

    maxVersions (オプション)

    OptionalValue<Integer>

    バージョンの最大数。

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

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

    timeRange (オプション)

    OptionalValue<TimeRange>

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

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

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

    columnsToGet (オプション)

    Set<String>

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

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

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

    filter (オプション)

    OptionalValue<Filter>

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

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

サンプルコード

次のサンプルコードは、test_table テーブルからプライマリキー値 row1 と row2 を持つ 2 つのデータ行を読み取ります。

public static void batchGetRowExample(SyncClient client) {
    // クエリ条件を構築する
    MultiRowQueryCriteria multiRowQueryCriteria = new MultiRowQueryCriteria("test_table");
    // 1 行目のプライマリキー情報を追加する
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
    multiRowQueryCriteria.addRow(primaryKeyBuilder.build());
    // 2 行目のプライマリキー情報を追加する
    primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row2"));
    multiRowQueryCriteria.addRow(primaryKeyBuilder.build());
    // クエリするバージョンを設定する
    multiRowQueryCriteria.setMaxVersions(1);

    // batchGetRow メソッドを呼び出して、バッチデータクエリを実行する
    BatchGetRowRequest batchGetRowRequest = new BatchGetRowRequest();
    batchGetRowRequest.addMultiRowQueryCriteria(multiRowQueryCriteria);
    BatchGetRowResponse batchGetRowResponse = client.batchGetRow(batchGetRowRequest);

    // 返された結果を処理する
    System.out.println("* RequestId: " + batchGetRowResponse.getRequestId());
    System.out.println("* すべて成功しましたか: " + batchGetRowResponse.isAllSucceed());
    // 正常に読み取られた行を出力する
    System.out.println("* 成功した行: ");
    for(BatchGetRowResponse.RowResult rowResult:batchGetRowResponse.getSucceedRows())
        System.out.println(rowResult.getRow());
    // 読み取りに失敗した行を出力する
    if(!batchGetRowResponse.isAllSucceed()) {
        System.out.println("* 失敗した行: ");
        for(BatchGetRowResponse.RowResult rowResult:batchGetRowResponse.getFailedRows())
            System.out.println(rowResult.getTableName() + " | " + batchGetRowRequest.getPrimaryKey(rowResult.getTableName(), rowResult.getIndex()) + " | " + rowResult.getError());
    }
}

バッチでデータを読み取るときにパラメーターを設定するには、次のサンプルコードを参照できます。

  • 複数のテーブルからデータを読み取る。バッチ読み取り操作では、一度に複数のテーブルからデータを読み取ることができます。テーブルごとに MultiRowQueryCriteria オブジェクトを指定する必要があります。

    // 2 番目のテーブルのクエリ条件を構築する
    MultiRowQueryCriteria multiRowQueryCriteria1 = new MultiRowQueryCriteria("orders_small");
    // 1 行目のプライマリキー情報を追加する
    primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("order_id", PrimaryKeyValue.fromString("90fb478c-1360-11f0-a34d-00163e30a2a9"));
    multiRowQueryCriteria1.addRow(primaryKeyBuilder.build());
    // クエリするバージョンを設定する
    multiRowQueryCriteria1.setMaxVersions(1);
    // リクエストに MultiRowQueryCriteria を追加する
    batchGetRowRequest.addMultiRowQueryCriteria(multiRowQueryCriteria1);
  • 読み取るバージョン範囲を設定する。バージョン範囲内のデータのみが返されます。

    // 1 日前から現在までのデータを読み取るバージョン範囲を設定する
    multiRowQueryCriteria.setTimeRange(new TimeRange(System.currentTimeMillis() - 86400*1000, System.currentTimeMillis()));
  • 読み取る属性列を指定する。

    multiRowQueryCriteria.addColumnsToGet("col1");

参照