调用GetRange接口读取指定主键范围内的数据。

请求消息结构

message GetRangeRequest {
    required string table_name = 1;
    required Direction direction = 2;
    repeated string columns_to_get = 3;  // 不指定则读出所有的列。
    optional TimeRange time_range = 4;
    optional int32 max_versions = 5;
    optional int32 limit = 6;
    required bytes inclusive_start_primary_key = 7; // Plainbuffer编码为二进制。
    required bytes exclusive_end_primary_key = 8; // Plainbuffer编码为二进制。
    optional bytes filter = 10;
    optional string start_column = 11;
    optional string end_column = 12;
}
名称 类型 是否必选 描述
table_name string 要读取的数据所在的表名。
direction Direction 本次查询的顺序。
  • 如果为正序,则inclusive_start_primary应小于exclusive_end_primary,响应中各行按照主键由小到大的顺序进行排列。
  • 如果为逆序,则inclusive_start_primary应大于exclusive_end_primary,响应中各行按照主键由大到小的顺序进行排列。
columns_to_get repeated string 需要返回的全部列的列名。如果为空,则返回指定行的所有列。columns_to_get中string的个数不应超过128个。

如果给出了重复的列名,返回结果只会包含一次该列。

time_range TimeRange 和max_versions只能存在一个 读取数据的版本时间戳范围。时间戳的取值最小值为0,最大值为INT64.MAX。

如果要查询一个范围,则指定start_time和end_time。如果要查询一个特定时间戳,则指定specific_time。

如果指定的time_range为[100, 200),则返回的列数据的时间戳必须位于[100, 200)范围内,前闭后开区间。

max_versions int32 和time_range只能存在一个 读取数据时,最多返回的版本个数。

如果指定max_versions为2,则每一列最多返回2个版本的数据。

limit int32 本次读取最多返回的行数。如果查询到的行数超过此值,则通过响应中包含的断点记录本次读取到的位置,以便下一次读取。此值必须大于 0。

无论是否设置此值,表格存储最多返回的行数为5000且总数据大小不超过 4 MB。

inclusive_start_primary_key bytes 本次范围读取的起始主键,由Plainbuffer编码。更多信息,请参见Plainbuffer

如果该行存在,则响应中一定会包含此行。

exclusive_end_primary_key bytes 本次范围读取的终止主键,由Plainbuffer编码。更多信息,请参见Plainbuffer

无论该行是否存在,响应中都不会包含此行。

在GetRange中,inclusive_start_primary_key和exclusive_end_primary_key中的Column的type可以使用本操作专用的两个类型INF_MIN和INF_MAX。类型为INF_MIN的Column小于其它Column,类型为INF_MAX的Column大于其它Column。

filter bytes 过滤条件表达式。Filter经过protobuf序列化后的二进制数据。
start_column string 指定读取时的起始列,主要用于宽行读。返回的结果中包含当前起始列。列的顺序按照列名的字典序排序。

如果一张表有a、b、c三列,读取时指定start_column为b,则会从b列开始读,返回b、c两列。

end_column string 指定读取时的结束列,主要用于宽行读。返回的结果中不包含当前结束列。列的顺序按照列名的字典序排序。

如果一张表有a、b、c三列,读取时指定end_column为b,则读到b列时会结束,返回a列。

响应消息结构

message GetRangeResponse {
    required ConsumedCapacity consumed = 1;
    required bytes rows = 2; 
    optional bytes next_start_primary_key = 3; 
}
名称 类型 描述
consumed ConsumedCapacity 本次操作消耗的服务能力单元。更多信息,请参见服务能力单元
rows bytes 读取到的所有数据,由Plainbuffer编码。更多信息,请参见Plainbuffer

如果请求中direction为FORWARD,则所有行按照主键由小到大进行排序;如果请求中direction为BACKWARD,则所有行按照主键由大到小进行排序。

其中每行的primary_key_columns和attribute_columns均只包含在columns_to_get中指定的列,其顺序不保证与请求中的columns_to_get一致;primary_key_columns的顺序也不保证与建表时指定的顺序一致。

如果请求中指定的columns_to_get不含有任何主键列,则其主键在查询范围内。但没有任何一个属性列在columns_to_get中的行将不会出现在响应消息。

next_start_primary_key bytes 本次操作的断点信息,由Plainbuffer编码。更多信息,请参见Plainbuffer编码。

若为空,则本次 GetRange 的响应消息中已包含了请求范围内的所有数据。

若不为空,则表示本次 GetRange 的响应消息中只包含了 [inclusive_start_primary_key, next_start_primary_key) 间的数据,若需要剩下的数据,需要将 next_start_primary_key 作为 inclusive_start_primary_key,原始请求中的 exclusive_end_primary_key 作为 exclusive_end_primary_key 继续执行 GetRange 操作。
说明 表格存储系统中限制了 GetRange 操作的响应消息中数据不超过 5000 行,大小不超过 4 MB。即使在 GetRange 请求中未设定 limit,在响应中仍可能出现 next_start_primary_key。因此在使用 GetRange 时一定要对响应中是否有 next_start_primary_key 进行处理。

使用SDK

您可以使用如下语言的SDK范围读取数据。

服务能力单元消耗

  • GetRange操作消耗读服务能力单元的数值为查询范围内所有行主键数据大小与实际读取的属性列数据大小之和除以 4 KB 向上取整。关于数据大小的计算请参见产品定价
  • 如果请求超时,结果未定义,则服务能力单元有可能被消耗,也可能未被消耗。
  • 如果返回内部错误(HTTP状态码:5XX),则此次操作不消耗服务能力单元,其他错误情况消耗1读服务能力单元。