このトピックでは、Java SDK を使用して、Tablestore からプライマリキー値が指定された範囲内にあるデータを読み取る方法について説明します。
前提条件
メソッドの説明
public GetRangeResponse getRange(GetRangeRequest getRangeRequest) throws TableStoreException, ClientExceptionサンプルコード
次のサンプルコードは、プライマリキー値が row1 より大きい test_table テーブルからデータを読み取ります。
public static void getRangeExample(SyncClient client) {
// クエリ条件を構築する
RangeRowQueryCriteria rangeRowQueryCriteria = new RangeRowQueryCriteria("test_table");
// クエリの開始プライマリキーを設定する
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
rangeRowQueryCriteria.setInclusiveStartPrimaryKey(primaryKeyBuilder.build());
// 終了プライマリキーを設定する。結果は終了プライマリキーを含まない
primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.INF_MAX);
rangeRowQueryCriteria.setExclusiveEndPrimaryKey(primaryKeyBuilder.build());
// クエリバージョンを設定する
rangeRowQueryCriteria.setMaxVersions(1);
// getRange メソッドを呼び出してデータをクエリする
GetRangeRequest getRangeRequest = new GetRangeRequest(rangeRowQueryCriteria);
GetRangeResponse getRangeResponse = client.getRange(getRangeRequest);
// 応答を処理する
System.out.println("RequestId: " + getRangeResponse.getRequestId());
System.out.println("Read CU Cost: " + getRangeResponse.getConsumedCapacity().getCapacityUnit().getReadCapacityUnit());
System.out.println("Write CU Cost: " + getRangeResponse.getConsumedCapacity().getCapacityUnit().getWriteCapacityUnit());
for(Row row : getRangeResponse.getRows())
System.out.println(row);
}1 回の範囲読み取り操作でスキャンできるデータの最大量は、5,000 行または 4 MB です。制限を超えた場合、次の読み取り操作のプライマリキー値が返されます。反復クエリについては、次のコードを参照できます。
while(true) {
GetRangeRequest getRangeRequest = new GetRangeRequest(rangeRowQueryCriteria);
GetRangeResponse getRangeResponse = client.getRange(getRangeRequest);
// 応答を処理する
System.out.println("RequestId: " + getRangeResponse.getRequestId());
System.out.println("Read CU Cost: " + getRangeResponse.getConsumedCapacity().getCapacityUnit().getReadCapacityUnit());
System.out.println("Write CU Cost: " + getRangeResponse.getConsumedCapacity().getCapacityUnit().getWriteCapacityUnit());
for(Row row : getRangeResponse.getRows())
System.out.println(row);
System.out.println("Rows Count: " + getRangeResponse.getRows().size());
// 次の読み取り操作の開始プライマリキーを設定する
if(getRangeResponse.getNextStartPrimaryKey() != null)
rangeRowQueryCriteria.setInclusiveStartPrimaryKey(getRangeResponse.getNextStartPrimaryKey());
else break;
}また、データをクエリする際に、次の設定を構成するための次のサンプルコードも参照できます。
データを読み取る方向を設定します。
// データを逆方向に読み取るように設定する rangeRowQueryCriteria.setDirection(Direction.BACKWARD); // 開始プライマリキーを設定する。データを逆方向に読み取る場合、開始プライマリキーは終了プライマリキーよりも大きくなければならない PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder(); primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.INF_MAX); rangeRowQueryCriteria.setInclusiveStartPrimaryKey(primaryKeyBuilder.build()); // 終了プライマリキーを設定する。結果は終了プライマリキーを含まない primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder(); primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1")); rangeRowQueryCriteria.setExclusiveEndPrimaryKey(primaryKeyBuilder.build());読み取るデータのバージョン範囲を設定します。バージョン範囲内のデータのみが返されます。
// クエリするデータのバージョン範囲を現在の時刻の 1 日前に設定する rangeRowQueryCriteria.setTimeRange(new TimeRange(System.currentTimeMillis() - 86400*1000, System.currentTimeMillis()));読み取る属性列を指定します。
rangeRowQueryCriteria.addColumnsToGet("col2");1 回の操作で返す行の最大数を設定します。
rangeRowQueryCriteria.setLimit(10);