全部產品
Search
文件中心

Tablestore:迭代讀取資料

更新時間:Jun 27, 2025

本文介紹如何通過 Java SDK 迭代讀取Table Store中的資料。

前提條件

初始化 Tablestore Client

方法說明

public Iterator<Row> createRangeIterator(RangeIteratorParameter rangeIteratorParameter) throws TableStoreException, ClientException

RangeIteratorParameter參數說明

名稱

類型

說明

tableName(必選)

String

資料表名稱。

inclusiveStartPrimaryKey(必選)

PrimaryKey

起始主鍵資訊。

  • 返回資料包含起始主鍵。

  • 主鍵個數和類型必須與資料表的主鍵保持一致。

  • 正向讀取資料時,起始主鍵必須小於結束主鍵。

  • 反向讀取資料時,起始主鍵必須大於結束主鍵。

  • PrimaryKeyValue.INF_MIN 表示無限小,PrimaryKeyValue.INF_MAX 表示無限大。

exclusiveEndPrimaryKey(必選)

PrimaryKey

結束主鍵資訊。

  • 返回資料不包含結束主鍵。

  • 主鍵個數和類型必須與資料表的主鍵保持一致。

  • PrimaryKeyValue.INF_MIN 表示無限小,PrimaryKeyValue.INF_MAX 表示無限大。

direction(可選)

Direction

讀取方向。

  • FORWARD:預設值,正向讀取資料。

  • BACKWARD:反向讀取資料。

maxVersions(可選)

OptionalValue<Integer>

最大版本數。

  • 必須設定最大版本數和版本範圍的其中一個。

  • 如果符合查詢條件的資料版本數量超過設定的最大版本數,按從新到舊的順序返回指定版本數量的資料。

timeRange(可選)

OptionalValue<TimeRange>

資料版本範圍。

  • 必須設定最大版本數和版本範圍的其中一個。

  • Table Store資料表的每個屬性列可以有不同的資料版本,設定版本範圍後,僅返回版本範圍內的資料。

maxCount(可選)

int

最大迭代讀取行數,必須大於 0。

bufferSize(可選)

int

緩衝大小,必須大於 0。如果符合查詢條件的資料行數大於設定的值,單次查詢返回指定的緩衝行數和下一次查詢的起始主索引值。

columnsToGet(可選)

Set<String>

指定讀取的資料列,可以是主鍵列或屬性列。

  • 不設定columnsToGet時,返回整行資料。

  • 設定columnsToGet時,如果讀取的行資料不包含任何指定的資料列,不返回該行資料。

filter(可選)

OptionalValue<Filter>

過濾條件,詳情請參見過濾器

  • 如果同時設定columnsToGet和filter,先按columnsToGet篩選合格資料行,再按filter條件過濾資料。

範例程式碼

以下範例程式碼使用迭代方式讀取 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");

相關文檔