开发者社区 问答 正文

如何操作ComputeSplitPointsBySize



行为


将全表的数据在逻辑上划分成接近指定大小的若干分片,返回这些分片之间的分割点以及分片所在机器的提示。一般用于计算引擎规划并发度等执行计划。

请求结构message ComputeSplitPointsBySizeRequest {
    required string table_name = 1;
    required int64 split_size = 2; // in 100MB
}




table_name:

  • 类型:string。
  • 是否必要参数:是
  • 要切分的数据所在的表名。

split_size:
  • 类型:int64
  • 是否必要参数:是
  • 每个分片的近似大小,以百兆为单位。


响应消息结构message ComputeSplitPointsBySizeResponse {
    required ConsumedCapacity consumed = 1;
    repeated PrimaryKeySchema schema = 2;
    /**
     * Split points between splits, in the increasing order
     *
     * A split is a consecutive range of primary keys,
     * whose data size is about split_size specified in the request.
     * The size could be hard to be precise.
     *
     * A split point is an array of primary-key column w.r.t. table schema,
     * which is never longer than that of table schema.
     * Tailing -inf will be omitted to reduce transmission payloads.
     */
    repeated bytes split_points = 3;
    /**
     * Locations where splits lies in.
     *
     * By the managed nature of TableStore, these locations are no more than hints.
     * If a location is not suitable to be seen, an empty string will be placed.
     */
     message SplitLocation {
         required string location = 1;
         required sint64 repeat = 2;
     }
     repeated SplitLocation locations = 4;
}




consumed:
  • 类型:ConsumedCapacity
  • 本次请求消耗的服务能力单元。

schema:
  • 类型:PrimaryKeySchema
  • 该表的 Schema,与建表时给出的 Schema 相同。

split_points:
  • 类型:repeated bytes
  • 分片之间的分割点。分割点之间保证单调增。每个分割点都是以Plainbuffer编码的行,并且只有primary-key项。为了减少传输的数据量,分割点最后的-inf不会传输。

locations:
  • 类型:repeated SplitLocation
  • 分割点所在机器的提示。可以为空。

举个例子,如果有一张表有三列主键,其中首列主键类型为string。调用这个API后得到5个分片,分别为(-inf,-inf,-inf)到("a",-inf,-inf)、("a",-inf,-inf)到("b",-inf,-inf)、("b",-inf,-inf)到("c",-inf,-inf)、("c",-inf,-inf)到("d",-inf,-inf)和("d",-inf,-inf)到(+inf,+inf,+inf)。前三个落在”machine-A”,后两个落在”machine-B”。那么,split_points为(示意)[("a"),("b"),("c"),("d")],而locations为(示意)"machine-A"*3, "machine-B"*2。

服务能力单元消耗


消耗的读服务能力单元数量与分片的数量相同。不消耗写服务能力单元。

展开
收起
云栖大讲堂 2017-10-25 14:15:20 1724 分享 版权
阿里云 AI 助理回答

这个描述是关于一个数据处理或数据库服务的API接口,它主要用于逻辑上分割表数据以规划并行计算或执行计划,特别是在大数据处理和分布式计算场景中。具体到阿里云的产品生态,虽然没有直接命名某个特定服务,但这个功能与阿里云表格存储(Table Store)的部分特性非常相似。表格存储是阿里云提供的一种NoSQL多模型数据库服务,支持大规模结构化数据存储与实时查询。

行为说明

该API行为通过ComputeSplitPointsBySizeRequest请求来实现,主要目的是根据指定的数据大小(以100MB为单位)将一个表的数据逻辑切分成多个分片(splits)。这有助于优化查询性能和并行处理能力,比如在进行大规模数据分析、数据导入导出或者MapReduce类任务时,能够更高效地分配计算资源。

请求参数

  • table_name:需要切分的表名。
  • split_size:每个分片的目标大小,单位为100MB。

响应结构

响应包括了消耗的服务能力单元信息、表的主键Schema、分片之间的分割点以及这些分割点所在机器的提示信息。其中: - consumed:本次操作消耗的服务能力单元量。 - schema:表的主键结构定义。 - split_points:表示各个分片边界的具体主键值,用于界定数据分片范围。 - locations:虽然给出的是机器位置的提示信息,但实际上在分布式系统中,这些信息更多作为逻辑上的参考而非物理位置的精确指示,因为实际的负载均衡和数据分布由系统动态管理。

例子解析

假设得到5个分片分布在两台不同的机器上,这个过程不涉及写操作,因此只消耗读服务能力单元,且消耗量等于分片数量。这样的设计对于用户来说,可以基于返回的信息来优化后续的数据处理策略,比如决定如何并行读取数据、安排计算任务等。

阿里云产品关联

虽然上述描述未直接指明使用的是阿里云的哪个具体服务,但从功能特性和术语使用来看,它与阿里云表格存储(Table Store)的高级操作理念相契合。表格存储支持丰富的数据模型,并提供了灵活的API接口来满足不同场景下的数据处理需求,包括但不限于数据分片管理和并行处理优化。

综上所述,如果你正在使用阿里云服务并且需要对大量数据进行高效处理,可以考虑利用表格存储的相关功能来实现类似的数据分片和并行计算优化。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: