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

Tablestore:行のバッチ読み取り

最終更新日:Aug 06, 2026

Tablestore SDK for Java を使用して、1 回のリクエストで、完全なプライマリキーに基づき、1 つ以上の Wide Column モデルのテーブルから複数の行を読み取ります。

前提条件

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

説明

batchGetRow を呼び出して複数の行を読み取ります。テーブルごとに 1 つの MultiRowQueryCriteria を使用します。同一の criteria 内のすべての行は、バージョン、取得する列、フィルターの設定を共有します。

サーバーは各行を独立して処理します。ある行で失敗しても、他の行には影響しません。結果を確認するには、isAllSucceedgetSucceedRowsgetFailedRows を呼び出します。

public BatchGetRowResponse batchGetRow(BatchGetRowRequest batchGetRowRequest) throws TableStoreException, ClientException
説明

1 回のバッチ読み取りで取得できる行は最大 100 行です。

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

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("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());
    }
}

パラメーター

BatchGetRowRequest には、次のパラメーターが含まれます。

名前

タイプ

説明

criteriasGroupByTable (必須)

Map<String, MultiRowQueryCriteria>

テーブルごとにグループ化されたバッチ読み取り条件です。テーブルごとに 1 つの MultiRowQueryCriteria を追加します。同一の criteria 内のすべての行は、バージョン、取得する列、フィルターの設定を共有します。

テーブルごとのバッチ読み取り条件

criteriasGroupByTable の各値は MultiRowQueryCriteria 型で、次のパラメーターを含みます。

名前

タイプ

説明

tableName (必須)

String

テーブル名です。

rowKeys (必須)

List<PrimaryKey>

読み取る行のプライマリキーです。addRow を呼び出して追加します。各プライマリキーには、テーブルスキーマと同じ順序および同じ型で、すべてのプライマリキー列を含める必要があります。

maxVersions (任意)

Integer

各属性列に対して返すデータバージョンの最大数です。一致するバージョンがこれを超える場合、Tablestore は新しい順にバージョンを返します。maxVersionstimeRange の少なくとも一方を設定してください。

timeRange (任意)

TimeRange

データバージョンの範囲です。範囲内のバージョンのみが返されます。maxVersionstimeRange の少なくとも一方を設定してください。

columnsToGet (任意)

Set<String>

取得する列です。このパラメーターを指定しない場合、行全体が返されます。指定した場合に、行に指定した列が 1 つも含まれないと、行結果の rownull になります。

filter (任意)

Filter

columnsToGetfilter の両方を指定した場合、Tablestore は最初に取得する列を選択し、その後フィルターを適用します。

フィルターの設定方法については、「フィルターの使用」をご参照ください。

レスポンス

BatchGetRowResponse には、次の操作固有フィールドが含まれます。

フィールド

タイプ

説明

tableToRowsResult

Map<String, List<RowResult>>

getTableToRowsResult を呼び出して取得する、テーブルごとにグループ化された行レベルの結果です。成功した行結果と失敗した行結果は、getSucceedRowsgetFailedRows を呼び出して取得することもできます。

行結果

tableToRowsResult の各要素は RowResult 型で、次のフィールドを含みます。

フィールド

タイプ

説明

isSucceed

boolean

行が正常に読み取られたかどうかを示します。

tableName

String

テーブル名です。

row

Row

返された行です。行が存在しない、フィルター条件を満たさない、または columnsToGet で指定された列が 1 つも含まれない場合、値は null になります。

error

Error

行の読み取りに失敗した場合に返されるエラー情報です。

index

int

対応する MultiRowQueryCriteria 内の行の位置です。

シナリオ

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

1 回のリクエストで複数のテーブルから読み取るには、テーブルごとに 1 つの MultiRowQueryCriteria を作成し、addMultiRowQueryCriteria を呼び出して各 criteria をリクエストに追加します。

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 を呼び出して、列値フィルターを criteria に関連付けます。この 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);