【发布时间】:2020-11-03 02:30:20
【问题描述】:
有没有办法在 Spanner SQL 查询的 WHERE 子句中实现 <, >, etc 比较,其中比较的值不是标量而是元组/结构?
例如,假设我们有一个表 users(故意不切实际的架构)
CREATE TABLE users (
is_special BOOL NOT NULL,
registered_on TIMESTAMP NOT NULL,
) PRIMARY KEY (is_special DESC, registered_on DESC)
PK 索引的自然排序顺序为is_special DESC, registered_on DESC。
我想选择从该 PK 索引中的特定行开始的一系列行(即来自游标):
SELECT * FROM users
WHERE (is_special, registered_on) < (@cursor.is_special, @cursor.registered_on)
LIMIT 100
Spanner SQL 不允许这样做,因为元组被视为 STRUCT 类型,而 STRUCT 类型不允许 < 比较。有没有其他方法可以做到这一点?
使用 Read API,我可以通过使用 KeyRange 并提供我想要开始查询的行的 PK 来查询范围,但我想在 SQL 中实现同样的功能。
【问题讨论】: