表格存储提供了单行读取和范围读取的查询方式用于读取索引表中数据。当返回的属性列在索引表中时,您可以直接读取索引表获取数据,否则请自行反查数据表获取数据。
前提条件
已初始化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) {
//处理每一行数据。
}