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

Tablestore:行のバッチ読み取り

最終更新日:Jun 26, 2026

Tablestore SDK for Java を使用すると、1 回のリクエストで 1 つ以上のテーブルから複数の行を読み取れます。各行は独立した結果を返すため、プライマリキーによって詳細レコードをバッチ取得できます。

前提条件

Tablestore SDK for Java をインストールし、クライアントを初期化します。

説明

public BatchGetRowResponse batchGetRow(BatchGetRowRequest batchGetRowRequest) throws TableStoreException, ClientException

1 つのリクエストで複数の行を読み取ります。 BatchGetRowRequest には、addMultiRowQueryCriteria を呼び出すことで追加される、1 つ以上の MultiRowQueryCriteria オブジェクトが含まれます。 各 MultiRowQueryCriteria は 1 つのテーブルを対象とします。 その条件内のすべての行は、maxVersionscolumnsToGet、および filter などの同じクエリ条件を共有します。

サーバーは各行を個別に処理するため、ある行で失敗しても他の行には影響しません。行レベルの結果を確認するには、isAllSucceedgetSucceedRows、または getFailedRows を呼び出します。

説明

1 回のBatchGetRow 呼び出しで、最大 100 行を取得できます。

次の例では、batch_get_demo テーブルからプライマリキーが row1row2 の 2 行を読み取り、各列の最新バージョンのみを返します。

String tableName = "batch_get_demo";

MultiRowQueryCriteria criteria = new MultiRowQueryCriteria(tableName);

// 行 1 のプライマリキーを追加
PrimaryKeyBuilder pkb1 = PrimaryKeyBuilder.createPrimaryKeyBuilder();
pkb1.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
criteria.addRow(pkb1.build());

// 行 2 のプライマリキーを追加
PrimaryKeyBuilder pkb2 = PrimaryKeyBuilder.createPrimaryKeyBuilder();
pkb2.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row2"));
criteria.addRow(pkb2.build());

criteria.setMaxVersions(1);

BatchGetRowRequest request = new BatchGetRowRequest();
request.addMultiRowQueryCriteria(criteria);

BatchGetRowResponse response = client.batchGetRow(request);
System.out.println("RequestId: " + response.getRequestId());
System.out.println("All Succeeded: " + response.isAllSucceed());

for (BatchGetRowResponse.RowResult rowResult : response.getSucceedRows()) {
    System.out.println("Succeeded: " + rowResult.getRow());
}
if (!response.isAllSucceed()) {
    for (BatchGetRowResponse.RowResult fail : response.getFailedRows()) {
        System.out.println("Failed: table=" + fail.getTableName()
                + " index=" + fail.getIndex()
                + " error=" + fail.getError());
    }
}

必須パラメーターは tableNamerowKeys、および maxVersions または timeRange のいずれかです。完全なスキーマについては、パラメーターテーブルをご参照ください。

パラメーター

MultiRowQueryCriteria は、単一テーブルのバッチクエリ条件を保持します。

名前

説明

tableName (必須)

String

読み取るテーブルの名前。

rowKeys (必須)

List<PrimaryKey>

addRow(PrimaryKey) を呼び出して追加されたプライマリキーのリスト。この条件では、すべての行が同じクエリ条件を共有します。

maxVersions (いずれか必須)

OptionalValue<Integer>

読み取るバージョンの最大数。maxVersions または timeRange の少なくとも 1 つを設定します。

カラムのバージョン数が maxVersions を超える場合、最新のバージョンから最大で maxVersions 個までが返されます。

timeRange (いずれか必須)

OptionalValue<TimeRange>

読み取る時間範囲。 maxVersions または timeRange の少なくとも 1 つを設定します。

各属性列は複数のバージョンを持つことができます。時間範囲を設定すると、Tablestore はその範囲内のバージョンのみを返します。

columnsToGet (任意)

Set<String>

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

  • columnsToGet を設定しない場合、Tablestore は行全体を返します。

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

filter (任意)

OptionalValue<Filter>

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

columnsToGetfilter の両方を設定した場合、 Tablestore はまず columnsToGet で指定された列を選択してから、行に filter を適用します。

シナリオ

複数テーブルにまたがる読み取り

1 つのリクエストで複数のテーブルから読み取るには、テーブルごとに 1 つの MultiRowQueryCriteria を作成し、addMultiRowQueryCriteria を使用してそれぞれをリクエストに追加します。

String tableA = "batch_get_demo";
String tableB = "batch_get_demo_2";

BatchGetRowRequest request = new BatchGetRowRequest();

// テーブル A のクエリ条件
MultiRowQueryCriteria criteriaA = new MultiRowQueryCriteria(tableA);
PrimaryKeyBuilder pkA = PrimaryKeyBuilder.createPrimaryKeyBuilder();
pkA.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
criteriaA.addRow(pkA.build());
criteriaA.setMaxVersions(1);
request.addMultiRowQueryCriteria(criteriaA);

// テーブル B のクエリ条件
MultiRowQueryCriteria criteriaB = new MultiRowQueryCriteria(tableB);
PrimaryKeyBuilder pkB = PrimaryKeyBuilder.createPrimaryKeyBuilder();
pkB.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("rowA"));
criteriaB.addRow(pkB.build());
criteriaB.setMaxVersions(1);
request.addMultiRowQueryCriteria(criteriaB);

BatchGetRowResponse response = client.batchGetRow(request);
System.out.println("Total succeeded rows: " + response.getSucceedRows().size());

フィルターを使用した読み取り

setFilter を呼び出して、条件に列値フィルターを設定します。この MultiRowQueryCriteria のすべての行で同じフィルターが使用され、Tablestore は一致する行のみを返します。

String tableName = "batch_get_demo";

MultiRowQueryCriteria criteria = new MultiRowQueryCriteria(tableName);

PrimaryKeyBuilder pkb1 = PrimaryKeyBuilder.createPrimaryKeyBuilder();
pkb1.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
criteria.addRow(pkb1.build());
PrimaryKeyBuilder pkb2 = PrimaryKeyBuilder.createPrimaryKeyBuilder();
pkb2.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row2"));
criteria.addRow(pkb2.build());

criteria.setMaxVersions(1);

// col1 が "val1" と等しい行のみを返す
SingleColumnValueFilter filter = new SingleColumnValueFilter(
        "col1",
        SingleColumnValueFilter.CompareOperator.EQUAL,
        ColumnValue.fromString("val1"));
filter.setPassIfMissing(false);
criteria.setFilter(filter);

BatchGetRowRequest request = new BatchGetRowRequest();
request.addMultiRowQueryCriteria(criteria);

BatchGetRowResponse response = client.batchGetRow(request);
int matched = 0;
for (BatchGetRowResponse.RowResult rowResult : response.getSucceedRows()) {
    if (rowResult.getRow() != null) {
        matched++;
    }
}
System.out.println("Rows matching filter: " + matched);

関連ドキュメント