表格存儲提供了單行讀取和范圍讀取的查詢方式用于讀取索引表中數據。當返回的屬性列在索引表中時,您可以直接讀取索引表獲取數據,否則請自行反查數據表獲取數據。
前提條件
已初始化Client。具體操作,請參見初始化OTSClient。
已創建二級索引。具體操作,請參見創建二級索引。
注意事項
索引表只能用于讀取數據。
本地二級索引表的第一列主鍵必須與數據表的第一列主鍵相同。
當需要返回的屬性列不在索引表中時,您需要自行反查數據表來獲取數據。
單行讀取數據
調用GetRow接口讀取一行數據。更多信息,請參見讀取單行數據。
參數
使用GetRow接口讀取索引表中數據時有如下注意事項:
table_name需要設置為索引表名稱。
由于系統會自動將未出現在索引列中的數據表主鍵補齊到索引表主鍵中,所以設置行的主鍵時,需要同時設置索引表索引列和補齊的數據表主鍵。
示例
以下示例用于讀取索引表中指定主鍵的行數據。
$request = [
'table_name' => '<INDEX_NAME>', //設置索引表名稱。
'primary_key' => [ //設置索引表主鍵。如果讀取本地二級索引中的數據,索引表的第一列主鍵必須與數據表的第一列主鍵相同。
['PK0', 123],
['Col1', "abc"],
['PK1', 'abc']
],
'max_versions' => 1, //設置讀取最新版本。
'columns_to_get' => ['Col1'] //設置要讀取的列。
];
$response = $otsClient->getRow($request);
范圍讀取數據
調用GetRange接口讀取一個范圍內的數據。更多信息,請參見范圍讀取數據。
參數
使用GetRange接口讀取索引表中數據時有如下注意事項:
table_name需要設置為索引表名稱。
由于系統會自動將未出現在索引列中的數據表主鍵補齊到索引表主鍵中,所以設置起始主鍵和結束主鍵時,需要同時設置索引表索引列和補齊的數據表主鍵。
示例
以下示例用于讀取索引表中指定主鍵范圍內的數據。
//查找PK0從1到4(左閉右開)的數據。
//范圍的邊界需要提供完整的主鍵,如果查詢的范圍不涉及到某一列值的范圍,則需要將該列設置為無窮大(INF_MAX)或者無窮小(INF_MIN)。
//如果讀取本地二級索引中的數據,索引表的第一列主鍵必須與數據表的第一列主鍵相同。
$startPK = [
['Col1', "abc"],
['PK0', null, PrimaryKeyTypeConst::CONST_INF_MIN] //'INF_MIN'表示最小值。
['PK1', null, PrimaryKeyTypeConst::CONST_INF_MIN] //'INF_MIN'表示最小值。
];
//范圍的邊界需要提供完整的主鍵,如果查詢的范圍不涉及到某一列值的范圍,則需要將該列設置為無窮大(INF_MAX)或者無窮小(INF_MIN)。
$endPK = [
['Col1', "abc"],
['PK0', null, PrimaryKeyTypeConst::CONST_INF_MAX] //'INF_MAX'表示最大值。
['PK1', null, PrimaryKeyTypeConst::CONST_INF_MAX] //'INF_MAX'表示最大值。
];
$request = [
'table_name' => '<INDEX_NAME>', //設置索引表名稱。
'max_versions' => 1, //設置讀取最新版本。
'direction' => DirectionConst::CONST_FORWARD, //設置正序查詢。
'inclusive_start_primary_key' => $startPK, //設置開始主鍵。
'exclusive_end_primary_key' => $endPK, //設置結束主鍵。
'limit' => 10 //設置最多返回10行數據。
];
$response = $otsClient->getRange ($request);
print "Read CU Consumed: {$response['consumed']['capacity_unit']['read']}\n";
foreach ($response['rows'] as $rowData) {
//處理每一行數據。
}
常見問題
相關文檔
文檔內容是否對您有幫助?