使用ComputeSplitsBySize接口可以将全表数据逻辑上划分成若干接近指定大小的分片,并返回这些分片之间的分割点以及分片所在机器的提示。一般用于计算引擎规划并发度等执行计划。
说明 API说明请参见
ComputeSplitPointsBySize。
前提条件
- 已初始化Client,详情请参见初始化。
- 已创建数据表并写入数据。
接口
/**
* 将全表的数据在逻辑上划分成接近指定大小的若干分片,返回这些分片之间的分割点以及分片所在机器的提示。
* 一般用于计算引擎规划并发度等执行计划。
* @api
* @param [] $request 请求参数。
* @return [] 请求返回。
* @throws OTSClientException 当参数检查出错或服务端返回校验出错时抛出异常。
* @throws OTSServerException 当OTS服务端返回错误时抛出异常。
*/
public function computeSplitPointsBySize(array $request)
参数
- 请求参数
参数 说明 table_name 数据表名称。 split_size 每个分片的近似大小。 单位为百兆(即100 MB)。
- 请求格式
$result = $client->ComputeSplitsBySize([ 'table_name' => '<string>', //设置数据表名称,必须设置。 'split_size' => <integer> //设置分片大小,必须设置。 ]);
- 响应参数
参数 说明 consumed 本次操作消耗服务能力单元的值。 capacity_unit表示使用的读写单元。- read:读吞吐量
- write:写吞吐量
primary_key_schema 数据表的主键定义,与创建数据表时的主键定义相同。 splits 分片之间的分割点,包括如下内容: - lower_bound:主键的区间最小值。
此值可以传递给GetRange用于范围读数据。
- 每一项的顺序是主键名、主键值PrimaryKeyValue、主键类型PrimaryKeyType。
- PrimaryKeyType可以是INTEGER、STRING(UTF-8编码字符串)、BINARY、INF_MIN(-inf)、 INF_MAX(inf)五种,分别用PrimaryKeyTypeConst::CONST_INTEGER、PrimaryKeyTypeConst::CONST_STRING、PrimaryKeyTypeConst::CONST_BINARY、PrimaryKeyTypeConst::CONST_INF_MIN、PrimaryKeyTypeConst::CONST_INF_MAX表示。
- upper_bound:主键的区间最大值。格式与lower_bound相同。
此值可以传递给GetRange用于范围读数据。
- location:分割点所在机器的提示,可以为空。
- 结果格式
[ 'consumed' => [ 'capacity_unit' => [ 'read' => <integer>, 'write' => <integer> ] ], 'primary_key_schema' => [ ['<string>', <PrimaryKeyType>], ['<string>', <PrimaryKeyType>, <PrimaryKeyOption>] ] 'splits' => [ [ 'lower_bound' => [ ['<string>', <PrimaryKeyValue>, <PrimaryKeyType>], ['<string>', <PrimaryKeyValue>, <PrimaryKeyType>] ], 'upper_bound' => [ ['<string>', <PrimaryKeyValue>, <PrimaryKeyType>], ['<string>', <PrimaryKeyValue>, <PrimaryKeyType>] ], 'location' => '<string>' ], // ... ] ]
示例
将全表的数据在逻辑上划分成接近100 MB的若干分片。
$result = $client->ComputeSplitsBySize([
'table_name' => 'MyTable',
'split_size' => 1
]);
foreach($result['splits'] as $split) {
print_r($split['location']);
print_r($split['lower_bound']);
print_r($split['upper_bound']);
}