当使用GetRange接口查询数据时返回指定范围外的数据时,您可以通过创建二级索引进行数据查询。
问题现象
在控制台范围查询、SDK范围查询、OTS外部表查询、OTSReader数据同步等场景中,使用GetRange接口查询数据时,返回的结果与查询条件中设置的范围不一致。
可能原因
设置的查询条件不符合最左匹配原则。例如当第一主键列的起始主键和结束主键分别设置为beginPrimaryKey = INF_MIN
和endPrimaryKey = INF_MAX
,第二主键列的起始主键和结束主键分别设置为beginPrimaryKey = 10
和endPrimaryKey = 10
,则返回的结果为全表数据,而不是第二主键列等于10的行。
重要
最左匹配原则表示最左优先,只有当最左主键的起止范围相同时,右侧主键设置的起止范围才有效;如果最左主键设置的起止范围不同时,右侧主键设置的范围将失效。此处最左主键和右侧主键指表结构中主键定义的先后顺序。
解决方案
创建二级索引调整为所需主键顺序后,请根据实际场景选择合适的查询方式。
如果是控制台范围查询、SDK范围查询场景,请直接使用二级索引进行范围查询。具体操作,请分别参见通过控制台读取数据和通过SDK读取数据。
如果是OTS外部表查询场景,请在外部表的建表SQL中配置表名称为二级索引名称。具体操作,请参见Tablestore外部表。
如果是OTSReader数据同步场景,请在数据同步脚本中配置表名称为二级索引名称。具体操作,请参见配置Tablestore(OTS) Reader。