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

问题现象

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

可能原因

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

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

解决方案

创建二级索引调整主键顺序后,请根据实际场景选择合适的查询方式。
  • 如果是控制台范围查询、SDK范围查询场景,请直接使用二级索引进行范围查询。具体操作,请分别参见通过控制台读取数据通过SDK读取数据
  • 如果是OTS外部表查询场景,请在外部表的建表SQL中配置表名称为二级索引名称。具体操作,请参见OTS外部表
  • 如果是OTSReader数据同步场景,请在数据同步脚本中配置表名称为二级索引名称。具体操作,请参见配置Tablestore(OTS) Reader