Tablestore提供了單行讀取和範圍讀取的查詢方式用於讀取索引表中資料。當返回的屬性列在索引表中時,您可以直接讀取索引表擷取資料,否則請自行反查資料表擷取資料。
前提條件
已初始化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) {
//處理每一行資料。
}