文档

使用GetRange接口查询数据时返回指定范围外的数据

更新时间:

当使用GetRange接口查询数据时返回指定范围外的数据时,您可以通过创建二级索引进行数据查询。

问题现象

在控制台范围查询、SDK范围查询、OTS外部表查询、OTSReader数据同步等场景中,使用GetRange接口查询数据时,返回的结果与查询条件中设置的范围不一致。

可能原因

设置的查询条件不符合最左匹配原则。例如当第一主键列的起始主键和结束主键分别设置为beginPrimaryKey = INF_MINendPrimaryKey = INF_MAX,第二主键列的起始主键和结束主键分别设置为beginPrimaryKey = 10endPrimaryKey = 10,则返回的结果为全表数据,而不是第二主键列等于10的行。

重要

最左匹配原则表示最左优先,只有当最左主键的起止范围相同时,右侧主键设置的起止范围才有效;如果最左主键设置的起止范围不同时,右侧主键设置的范围将失效。此处最左主键和右侧主键指表结构中主键定义的先后顺序。更多信息,请参见GetRange范围查询详解

解决方案

创建二级索引调整为所需主键顺序后,请根据实际场景选择合适的查询方式。

  • 如果是控制台范围查询、SDK范围查询场景,请直接使用二级索引进行范围查询。具体操作,请分别参见通过控制台读取数据通过SDK读取数据

  • 如果是OTS外部表查询场景,请在外部表的建表SQL中配置表名称为二级索引名称。具体操作,请参见Tablestore外部表

  • 如果是OTSReader数据同步场景,请在数据同步脚本中配置表名称为二级索引名称。具体操作,请参见配置Tablestore(OTS) Reader