このトピックでは、Java SDK のイテレータを使用して Tablestore からデータを読み取る方法について説明します。
前提条件
メソッドの説明
public Iterator<Row> createRangeIterator(RangeIteratorParameter rangeIteratorParameter) throws TableStoreException, ClientException
サンプルコード
次のサンプルコードは、イテレータを使用して test_table テーブルからプライマリキー値 row1 からデータを読み取る方法を示しています。
public static void createRangeIteratorExample(SyncClient client) {
// 反復クエリ条件を構築する
RangeIteratorParameter rangeIteratorParameter = new RangeIteratorParameter("test_table");
// 反復クエリの開始プライマリキーを設定する
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
rangeIteratorParameter.setInclusiveStartPrimaryKey(primaryKeyBuilder.build());
// 反復クエリの終了プライマリキーを設定する。結果は終了プライマリキーを含まない
primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.INF_MAX);
rangeIteratorParameter.setExclusiveEndPrimaryKey(primaryKeyBuilder.build());
// クエリするバージョンを設定する
rangeIteratorParameter.setMaxVersions(1);
// createRangeIterator を呼び出してイテレータを取得する
Iterator<Row> iterator = client.createRangeIterator(rangeIteratorParameter);
while(iterator.hasNext()) {
Row row = iterator.next();
System.out.println(row);
}
}
イテレータを使用してデータを読み取る際にパラメーターを設定するには、次のサンプルコードを参照できます。
データを読み取る方向を設定します。
// 逆方向にデータを読み取るように設定する rangeIteratorParameter.setDirection(Direction.BACKWARD); // 反復クエリの開始プライマリキーを設定する。逆方向にデータを読み取る場合、開始プライマリキーは終了プライマリキーよりも大きくなければならない PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder(); primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.INF_MAX); rangeIteratorParameter.setInclusiveStartPrimaryKey(primaryKeyBuilder.build()); // 反復クエリの終了プライマリキーを設定する。結果は終了プライマリキーを含まない primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder(); primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1")); rangeIteratorParameter.setExclusiveEndPrimaryKey(primaryKeyBuilder.build());
読み取るデータのバージョン範囲を設定します。この範囲内のデータのみが返されます。
// 1 日前から現在までのデータにクエリするバージョン範囲を設定する rangeIteratorParameter.setTimeRange(new TimeRange(System.currentTimeMillis() - 86400*1000, System.currentTimeMillis()));
イテレータを使用して読み取る行の最大数を設定します。
rangeIteratorParameter.setMaxCount(20);
バッファーサイズを設定します。
rangeIteratorParameter.setBufferSize(5);
読み取る属性列を指定します。
rangeIteratorParameter.addColumnsToGet("col2");