开发者社区 问答 正文

如何操作BatchGetRow



行为:


批量读取一个或多个表中的若干行数据。
BatchGetRow 操作可视为多个 GetRow 操作的集合,各个操作独立执行,独立返回结果,独立计算服务能力单元。
与执行大量的 GetRow 操作相比,使用 BatchGetRow 操作可以有效减少请求的响应时间,提高数据的读取速率。

请求结构:message BatchGetRowRequest {
    repeated TableInBatchGetRowRequest tables = 1;
}





tables:


  • 类型:repeated TableInBatchGetRowRequest

  • 是否必要参数:是

  • 指定了需要要读取的行信息。

  • 若 tables 中出现了下述情况,则操作整体失败,返回错误。
    tables 中任一表不存在。

  • tables 中任一表名不符合表名命名规范

  • tables 中任一行未指定主键、主键名称不符合规范或者主键类型不正确。

  • tables 中任一表的 columns_to_get 内的列名不符合列名命名规范

  • tables 中包含同名的表。

  • tables 中任一表内包含主键完全相同的行。

  • 所有 tables 中 RowInBatchGetRowRequest 的总个数超过 100 个。

  • tables 中任一表内不包含任何 RowInBatchGetRowRequest。

  • tables 中任一表的 columns_to_get 超过 128 列。


响应消息结构:message BatchGetRowResponse {
    repeated TableInBatchGetRowResponse tables = 1;
}





tables:


  • 类型:repeated TableInBatchGetRowResponse

  • 对应了每个 table 下读取到的数据。

  • 响应消息中 TableInBatchGetRowResponse 对象的顺序与 BatchGetRowRequest 中的 TableInBatchGetRowRequest 对象的顺序相同;每个 TableInBatchGetRowResponse 下面的 RowInBatchGetRowResponse 对象的顺序与 TableInBatchGetRowRequest 下面的 RowInBatchGetRowRequest 相同。

  • 如果某行不存在或者某行在指定的 columns_to_get 下没有数据,仍然会在 TableInBatchGetRowResponse 中有一条对应的 RowInBatchGetRowResponse,但其 row 下面的 primary_key_columns 和 attribute_columns 将为空。

  • 若某行读取失败,该行所对应的 RowInBatchGetRowResponse 中 is_ok 将为 false,此时 row 将为空。

[backcolor=transparent]注意:BatchGetRow 操作可能会在行级别部分失败,此时返回的 HTTP 状态码仍为 200。应用程序必须对 RowInBatchGetRowResponse 中的 error 进行检查确认每一行的执行结果,并进行相应的处理。


服务能力单元消耗:


  • 如果本次操作整体失败,不消耗任何服务能力单元。

  • 如果请求超时,结果未定义,服务能力单元有可能被消耗,也可能未被消耗。

  • 其他情况将每个 RowInBatchGetRowRequest 视为一个 GetRow 操作独立计算写服务能力单元,具体请参考 GetRow 服务能力单元消耗

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

您描述的是阿里云表格存储(Table Store,原OTS)中的BatchGetRow操作。这个操作允许用户一次性从一个或多个表中批量读取多行数据,相比单个执行GetRow操作,它能显著提升数据读取的效率和降低响应时间,特别适合于需要同时获取多个表或多个行数据的场景。

请求结构解析

  • tables: 这是一个重复字段,意味着您可以指定多个表及其想要读取的行信息。每个表的请求定义在TableInBatchGetRowRequest结构中,需包含表名、要查询的行(通过主键指定)以及可选的列筛选条件(columns_to_get)。需要注意的是,对tables的限制包括但不限于:确保所有表存在且符合命名规范、每行数据必须有正确的主键定义、列名合法等。此外,还有关于请求规模的限制,比如总行数不超过100、单表内columns_to_get不超过128列等。

响应消息结构

  • tables: 响应同样以TableInBatchGetRowResponse数组形式返回,与请求中的表顺序一一对应。对于成功读取的行,会返回相应的数据;如果某行不存在或指定的列没有数据,则对应的RowInBatchGetRowResponse中的数据部分为空。值得注意的是,即使操作在某些行上失败(例如,由于权限问题或数据不存在),整个BatchGetRow调用可能仍会返回HTTP状态码200,因此应用层需要检查每个RowInBatchGetRowResponse中的错误信息来确定每行操作的实际结果。

服务能力单元消耗

  • 批量操作的计费基于单个GetRow操作的扩展,只有成功的行读取操作才会消耗服务能力单元。如果整个操作因某种原因整体失败(如所有表都不存在),则不消耗任何服务能力单元。请求超时的情况处理未明确定义,可能消耗也可能不消耗服务单元。为了精确管理成本和性能预期,建议根据实际需求合理设计查询,并关注阿里云官方文档中关于服务能力单元消耗的具体计算规则。

综上所述,BatchGetRow是优化大规模数据读取效率的有效手段,但在使用时需注意遵守其参数限制和正确处理可能出现的部分失败情况。

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