全部产品
Search
文档中心

表格存储:范围读取数据

更新时间:May 11, 2026

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

前提条件

初始化Tablestore Client

方法说明

public GetRangeResponse GetRange(GetRangeRequest request)

异步方法:

public Task<GetRangeResponse> GetRangeAsync(GetRangeRequest request)

GetRangeRequest参数说明

名称

类型

说明

tableName(必选)

string

数据表名称。

inclusiveStartPrimaryKey(必选)

PrimaryKey

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

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

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

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

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

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

exclusiveEndPrimaryKey(必选)

PrimaryKey

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

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

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

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

direction(必选)

GetRangeDirection

读取方向。

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

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

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 }
    };

    // 调用 GetRange 方法读取行数据
    GetRangeRequest getRangeRequest = new GetRangeRequest("test_table", GetRangeDirection.Forward, inclusiveStartPrimaryKey, exclusiveEndPrimaryKey);
    GetRangeResponse getRangeResponse = client.GetRange(getRangeRequest);

    // 返回结果处理
    Console.WriteLine($"RequestId: {getRangeResponse.RequestID}");
    Console.WriteLine($"Read CU Cost: {getRangeResponse.ConsumedCapacityUnit.Read}");
    Console.WriteLine($"Write CU Cost: {getRangeResponse.ConsumedCapacityUnit.Write}");
    Console.WriteLine("Row Data: ");
    foreach (Row row in getRangeResponse.RowDataList)
    {
        Console.WriteLine(row);
    }
}
catch (Exception ex)
{
    Console.WriteLine($"Get Range failed, exception: {ex.Message}");
}

单次范围扫描数据上限为 5000 行或者 4 MB,超出限制部分的数据将返回用于下一次读取的起始主键值,您可以参考以下代码进行迭代查询。

while (true)
{
    // 调用 GetRange 方法读取行数据
    GetRangeRequest getRangeRequest = new GetRangeRequest("test_table", GetRangeDirection.Forward, inclusiveStartPrimaryKey, exclusiveEndPrimaryKey);
    GetRangeResponse getRangeResponse = client.GetRange(getRangeRequest);

    // 返回结果处理
    Console.WriteLine($"RequestId: {getRangeResponse.RequestID}");
    Console.WriteLine($"Read CU Cost: {getRangeResponse.ConsumedCapacityUnit.Read}");
    Console.WriteLine($"Write CU Cost: {getRangeResponse.ConsumedCapacityUnit.Write}");
    Console.WriteLine("Row Data: ");
    foreach (Row row in getRangeResponse.RowDataList)
    {
        Console.WriteLine(row);
    }

    if (getRangeResponse.NextPrimaryKey != null)
    {
        inclusiveStartPrimaryKey = getRangeResponse.NextPrimaryKey;
    }
    else
    {
        break;
    }
}

您也可以在查询数据时参考示例代码进行以下设置。

  • 设置数据读取方向。

    // 设置查询起始主键(反向读取数据时,起始主键要大于结束主键)
    PrimaryKey inclusiveStartPrimaryKey = new PrimaryKey()
    {
        { "id", ColumnValue.INF_MAX }
    };
    // 设置查询结束主键(返回结果不包含结束主键)
    PrimaryKey exclusiveEndPrimaryKey = new PrimaryKey()
    {
        { "id", new ColumnValue("row1") }
    };
    
    // 调用 GetRange 方法读取行数据(设置反向读取数据)
    GetRangeRequest getRangeRequest = new GetRangeRequest("test_table", GetRangeDirection.Backward, inclusiveStartPrimaryKey, exclusiveEndPrimaryKey);
  • 指定读取的属性列。

    HashSet<string> columnsToGet = new HashSet<string> { "col2" };
    
    // 调用 GetRange 方法读取行数据
    GetRangeRequest getRangeRequest = new GetRangeRequest("test_table", GetRangeDirection.Forward, inclusiveStartPrimaryKey, exclusiveEndPrimaryKey, columnsToGet, null);
  • 设置单次返回最大行数。

    int limit = 10;
    
    // 调用 GetRange 方法读取行数据
    GetRangeRequest getRangeRequest = new GetRangeRequest("test_table", GetRangeDirection.Forward, inclusiveStartPrimaryKey, exclusiveEndPrimaryKey, null, limit);

相关文档