全部產品
Search
文件中心

Tablestore:範圍讀取資料

更新時間:May 12, 2026

本文介紹如何通過 .NET SDK 範圍讀取Table Store中的資料。

前提條件

初始化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);

相關文檔