Tablestore SDK for Java を使用して、1 回のリクエストで、完全なプライマリキーに基づき、1 つ以上の Wide Column モデルのテーブルから複数の行を読み取ります。
前提条件
Tablestore SDK for Java をインストールし、クライアントを初期化します。
説明
batchGetRow を呼び出して複数の行を読み取ります。テーブルごとに 1 つの MultiRowQueryCriteria を使用します。同一の criteria 内のすべての行は、バージョン、取得する列、フィルターの設定を共有します。
サーバーは各行を独立して処理します。ある行で失敗しても、他の行には影響しません。結果を確認するには、isAllSucceed、getSucceedRows、getFailedRows を呼び出します。
public BatchGetRowResponse batchGetRow(BatchGetRowRequest batchGetRowRequest) throws TableStoreException, ClientException
1 回のバッチ読み取りで取得できる行は最大 100 行です。
次の例では、batch_get_demo テーブルから 2 行 (プライマリキー row1 と row2) を読み取り、各列の最新バージョンのみを返します。
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 (必須) |
|
テーブルごとにグループ化されたバッチ読み取り条件です。テーブルごとに 1 つの |
テーブルごとのバッチ読み取り条件
criteriasGroupByTable の各値は MultiRowQueryCriteria 型で、次のパラメーターを含みます。
|
名前 |
タイプ |
説明 |
|
tableName (必須) |
|
テーブル名です。 |
|
rowKeys (必須) |
|
読み取る行のプライマリキーです。 |
|
maxVersions (任意) |
|
各属性列に対して返すデータバージョンの最大数です。一致するバージョンがこれを超える場合、Tablestore は新しい順にバージョンを返します。 |
|
timeRange (任意) |
|
データバージョンの範囲です。範囲内のバージョンのみが返されます。 |
|
columnsToGet (任意) |
|
取得する列です。このパラメーターを指定しない場合、行全体が返されます。指定した場合に、行に指定した列が 1 つも含まれないと、行結果の |
|
filter (任意) |
|
フィルターの設定方法については、「フィルターの使用」をご参照ください。 |
レスポンス
BatchGetRowResponse には、次の操作固有フィールドが含まれます。
|
フィールド |
タイプ |
説明 |
|
|
|
|
行結果
tableToRowsResult の各要素は RowResult 型で、次のフィールドを含みます。
|
フィールド |
タイプ |
説明 |
|
|
|
行が正常に読み取られたかどうかを示します。 |
|
|
|
テーブル名です。 |
|
|
|
返された行です。行が存在しない、フィルター条件を満たさない、または |
|
|
|
行の読み取りに失敗した場合に返されるエラー情報です。 |
|
|
|
対応する |
シナリオ
複数テーブルにまたがる読み取り
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);