本文介紹如何通過 Java SDK 迭代讀取Table Store中的資料。
前提條件
方法說明
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());設定讀取的資料版本範圍,結果只返回版本範圍內的資料。
// 設定查詢的資料版本範圍為目前時間往前一天 rangeIteratorParameter.setTimeRange(new TimeRange(System.currentTimeMillis() - 86400*1000, System.currentTimeMillis()));設定最大迭代讀取行數。
rangeIteratorParameter.setMaxCount(20);設定緩衝大小。
rangeIteratorParameter.setBufferSize(5);指定讀取的屬性列。
rangeIteratorParameter.addColumnsToGet("col2");