全部產品
Search
文件中心

Tablestore:範圍讀取資料

更新時間:Mar 10, 2026

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

前提條件

初始化Tablestore Client

方法說明

public function getRange(array $request)

$request參數說明

名稱

類型

說明

table_name(必選)

string

資料表名稱。

inclusive_start_primary_key(必選)

array

起始主鍵資訊,包括主鍵列名稱和主索引值。

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

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

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

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

  • PrimaryKeyTypeConst::CONST_INF_MIN 表示無限小,PrimaryKeyTypeConst::CONST_INF_MAX 表示無限大。

exclusive_end_primary_key(必選)

array

結束主鍵資訊,包括主鍵列名稱和主索引值。

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

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

  • PrimaryKeyTypeConst::CONST_INF_MIN 表示無限小,PrimaryKeyTypeConst::CONST_INF_MAX 表示無限大。

direction(必選)

string

讀取方向。

  • DirectionConst::CONST_FORWARD:正向讀取資料。

  • DirectionConst::CONST_BACKWARD:反向讀取資料。

max_versions(可選)

int

最大版本數。

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

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

time_range(可選)

array

資料版本範圍。

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

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

limit(可選)

int

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

columns_to_get(可選)

array

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

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

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

column_filter(可選)

array

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

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

範例程式碼

以下範例程式碼用於讀取 test_table 表中主索引值大於 row1 的資料。

$request = array (
    'table_name' => 'test_table',
    // 設定查詢起始主鍵
    'inclusive_start_primary_key' => array (
        array('id', 'row1')
    ),
    // 設定查詢結束主鍵(返回結果不包含結束主鍵)
    'exclusive_end_primary_key'  => array (
        array('id', null, PrimaryKeyTypeConst::CONST_INF_MAX)
    ),
    // 設定正向讀取資料
    'direction' => DirectionConst::CONST_FORWARD,
    // 設定查詢版本
    'max_versions' => 1
);

try {
    // 調用 getRange 方法讀取行資料
    $response = $client->getRange ($request);

    // 返回結果處理
    echo "* Read CU Cost: " . $response['consumed']['capacity_unit']['read'] . "\n";
    echo "* Write CU Cost: " . $response['consumed']['capacity_unit']['write'] . "\n";
    echo "* Row Data: " . "\n";
    foreach ($response['rows'] as $row) {
        echo json_encode($row) . "\n";
    }
} catch (Exception $e){
    echo "Get Range failed.";
}

單次範圍掃描資料上限為 5000 行或者 4 MB,超出限制部分的資料將返回用於下一次讀取的起始主索引值,您可以參考以下代碼進行迭代查詢。

while (true) {
    // 調用 getRange 方法讀取行資料
    $response = $client->getRange ($request);
    // 返回結果處理
    echo "* Read CU Cost: " . $response['consumed']['capacity_unit']['read'] . "\n";
    echo "* Write CU Cost: " . $response['consumed']['capacity_unit']['write'] . "\n";
    echo "* Row Data: " . "\n";
    foreach ($response['rows'] as $row) {
        echo json_encode($row) . "\n";
    }
    
    if ($response['next_start_primary_key'] != null){
        $request['inclusive_start_primary_key'] = $response['next_start_primary_key'];
    } else {
        break;
    }
}

您也可以在查詢資料時參考範例程式碼進行以下設定。

  • 設定資料讀取方向。

    $request = array (
        'table_name' => 'test_table',
        // 設定查詢起始主鍵(反向讀取資料時,起始主鍵要大於結束主鍵)
        'inclusive_start_primary_key' => array (
            array('id', null, PrimaryKeyTypeConst::CONST_INF_MAX)
        ),
        // 設定查詢結束主鍵(返回結果不包含結束主鍵)
        'exclusive_end_primary_key'  => array (
            array('id', 'row1')
        ),
        // 設定反向讀取資料
        'direction' => DirectionConst::CONST_BACKWARD,
        // 設定查詢版本
        'max_versions' => 1
    );
  • 設定讀取的資料版本範圍,結果只返回版本範圍內的資料。

    // 設定查詢的資料版本範圍為目前時間往前一天
    $request['time_range'] = array (
        'start_time' => intval(microtime(true) * 1000) - 86400 * 1000,
        'end_time' => intval(microtime(true) * 1000)
    );
  • 指定讀取的屬性列。

    $request['columns_to_get'] = array('col2');
  • 設定單次返回最大行數。

    $request['limit'] = 10;

相關文檔

批量讀取資料