全部产品
Search
文档中心

表格存储:迭代读取数据

更新时间:May 11, 2026

本文介绍如何通过 .NET SDK 迭代读取表格存储中的数据。

前提条件

初始化Tablestore Client

方法说明

public IEnumerable<Row> GetRangeIterator(GetIteratorRequest request)

GetIteratorRequest参数说明

名称

类型

说明

tableName(必选)

string

数据表名称。

inclusiveStartPrimaryKey(必选)

PrimaryKey

起始主键信息,包括主键列名称和主键值。

  • 返回数据包含起始主键。

  • 主键个数和类型必须与数据表的主键保持一致。

  • 正向读取数据时,起始主键必须小于结束主键。

  • 反向读取数据时,起始主键必须大于结束主键。

  • ColumnValue.INF_MIN 表示无限小,ColumnValue.INF_MAX 表示无限大。

exclusiveEndPrimaryKey(必选)

PrimaryKey

结束主键信息,包括主键列名称和主键值。

  • 返回数据不包含结束主键。

  • 主键个数和类型必须与数据表的主键保持一致。

  • ColumnValue.INF_MIN 表示无限小,ColumnValue.INF_MAX 表示无限大。

direction(必选)

GetRangeDirection

读取方向。

  • GetRangeDirection.Forward:正向读取数据。

  • GetRangeDirection.Backward:反向读取数据。

consumedCapacityUnitCounter(必选)

CapacityUnit

操作消耗的服务能力单元。

limit(可选)

int

最大迭代读取行数,必须大于 0。

columnsToGet(可选)

HashSet<string>

指定读取的数据列,可以是主键列或属性列。

  • 不设置columnsToGet时,返回整行数据。

  • 设置columnsToGet时,如果读取的行数据不包含任何指定的数据列,将返回 null。

condition(可选)

IColumnCondition

过滤条件,详情请参见过滤器

  • 如果同时设置columnsToGet和condition,先按columnsToGet筛选符合条件的数据行,再按condition条件过滤数据。

示例代码

以下示例代码使用迭代方式读取 test_table 表中从主键值 row1 开始的数据。

try
{
    // 设置查询起始主键
    PrimaryKey inclusiveStartPrimaryKey = new PrimaryKey()
    {
        { "id", new ColumnValue("row1") }
    };
    // 设置查询结束主键(返回结果不包含结束主键)
    PrimaryKey exclusiveEndPrimaryKey = new PrimaryKey()
    {
        { "id", ColumnValue.INF_MAX }
    };

    // 构造CapacityUnit(记录迭代过程中消耗的CU值)
    CapacityUnit capacityUnit = new CapacityUnit(0, 0);

    // 构造迭代查询条件
    GetIteratorRequest getIteratorRequest = new GetIteratorRequest("test_table", GetRangeDirection.Forward, inclusiveStartPrimaryKey, exclusiveEndPrimaryKey, capacityUnit);

    // 调用 GetRangeIterator 获取迭代器
    IEnumerable<Row> iterator = client.GetRangeIterator(getIteratorRequest);
    foreach (var row in iterator)
    {
        Console.WriteLine(row);
    }
}
catch (Exception ex)
{
    Console.WriteLine($"Get range iterator failed, exception: {ex.Message}");
}

您可以在迭代读取数据时参考以下示例代码进行参数设置。

  • 设置数据读取方向。

    // 设置查询起始主键(反向读取数据时,起始主键要大于结束主键)
    PrimaryKey inclusiveStartPrimaryKey = new PrimaryKey()
    {
        { "id", ColumnValue.INF_MAX }
    };
    // 设置查询结束主键(返回结果不包含结束主键)
    PrimaryKey exclusiveEndPrimaryKey = new PrimaryKey()
    {
        { "id", new ColumnValue("row1") }
    };
    
    // 构造迭代查询条件(设置反向读取数据)
    GetIteratorRequest getIteratorRequest = new GetIteratorRequest("test_table", GetRangeDirection.Backward, inclusiveStartPrimaryKey, exclusiveEndPrimaryKey, capacityUnit);
  • 设置最大迭代读取行数。

    int limit = 20;
    
    // 构造迭代查询条件
    GetIteratorRequest getIteratorRequest = new GetIteratorRequest("test_table", GetRangeDirection.Forward, inclusiveStartPrimaryKey, exclusiveEndPrimaryKey, capacityUnit, null, limit);
  • 指定读取的属性列。

    HashSet<string> columnsToGet = new HashSet<string> { "col2" };
    
    // 构造迭代查询条件
    GetIteratorRequest getIteratorRequest = new GetIteratorRequest("test_table", GetRangeDirection.Forward, inclusiveStartPrimaryKey, exclusiveEndPrimaryKey, capacityUnit, columnsToGet);