本文介绍如何通过 Java SDK迭代读取表格存储中的数据。
前提条件
已完成 初始化Tablestore Client。
方法说明
createRangeIterator 返回一个 Java Iterator<Row>,用于迭代读取指定范围内的数据行。迭代器自动处理底层分批请求——每次调用 iterator.next() 时,SDK 透明地从缓冲区取数据并在必要时发起下一批请求,无需手动管理翻页 token 或循环调用 getRange。
public Iterator<Row> createRangeIterator(RangeIteratorParameter rangeIteratorParameter) throws TableStoreException, ClientException
RangeIteratorParameter 参数概览:
3 个必填参数:
tableName、inclusiveStartPrimaryKey、exclusiveEndPrimaryKey版本控制(二选一):
maxVersions或timeRange,必须指定其中一个读取方向:
direction,默认FORWARD;设为BACKWARD时,起始主键必须大于结束主键行数控制:
maxCount限制迭代器返回的总行数;bufferSize控制每次底层请求拉取的行数-
列过滤:
columnsToGet指定返回的列;filter在服务端过滤数据
示例代码
以下示例从 test_table 表的主键 row1 开始,正向读取到表末尾的所有数据行。
public static void createRangeIteratorExample(SyncClient client) {
// 1. 初始化迭代查询参数,指定目标表名
RangeIteratorParameter rangeIteratorParameter = new RangeIteratorParameter("test_table");
// 2. 设置起始主键(含):从 row1 开始读取
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
rangeIteratorParameter.setInclusiveStartPrimaryKey(primaryKeyBuilder.build());
// 3. 设置结束主键(不含):INF_MAX 表示读取到表末尾
primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.INF_MAX);
rangeIteratorParameter.setExclusiveEndPrimaryKey(primaryKeyBuilder.build());
// 4. 每个属性列只返回最新版本
rangeIteratorParameter.setMaxVersions(1);
// 5. 迭代读取所有匹配行,SDK 自动分批拉取,无需处理翻页逻辑
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()); -
按版本时间范围过滤,只返回范围内的数据版本。
// 只返回最近 24 小时内写入的数据版本 rangeIteratorParameter.setTimeRange(new TimeRange(System.currentTimeMillis() - 86400 * 1000, System.currentTimeMillis())); -
限制迭代器返回的最大总行数。
rangeIteratorParameter.setMaxCount(20); -
设置每次底层请求的拉取行数。
rangeIteratorParameter.setBufferSize(5); -
指定返回的属性列。
rangeIteratorParameter.addColumnsToGet("col2");
相关文档
该文章对您有帮助吗?