Redshift 查询忽略 LIMIT 子句

Posted

技术标签:

【中文标题】Redshift 查询忽略 LIMIT 子句【英文标题】:Redshift Query Ignoring LIMIT Clause 【发布时间】:2016-10-28 20:34:55 【问题描述】:

在调查重复的 event_id 时,我们注意到 Redshift 似乎忽略了简单查询中的 LIMIT 子句:

SELECT se_action
FROM events
WHERE event_id = 'e4a5ffbe-6a1d-47b7-ac10-6c57b2cd65ed'
ORDER BY collector_tstamp DESC
LIMIT 1;

运行此查询时,我收到了 800 多个结果。有趣的是,如果我删除 ORDER BY 子句,我只会收到一个预期的结果。

如何让它正确输出单个结果,或者这听起来像是 Redshift 的错误?

【问题讨论】:

有趣的是,如果您对此运行 EXPLAIN,则 XN 限制不在计划中,而是在其他查询中。 他们设置 sql 的方式应该可以工作,但您始终可以通过更改限制数量并尝试添加“偏移量”并查看它是否有效来测试它。奇怪的是它没有出现在“解释”中 【参考方案1】:

我能想到有两种方法可以限制您从采石场获得的结果数量,它们是 LIMITTOP

试试这个TOP 示例

SELECT TOP 1 se_action
FROM events
WHERE event_id = 'e4a5ffbe-6a1d-47b7-ac10-6c57b2cd65ed'
ORDER BY collector_tstamp DESC;

【讨论】:

【参考方案2】:

这听起来确实像 Redshift 中的一个错误。如果您使用LIMIT 1(或TOP 1),那么查询应该只返回一行。

如果您订阅了 AWS Support,请打开一个问题,以便他们跟踪潜在问题。如果您没有订阅支持,您可以发帖到Amazon Redshift discussion forum。

【讨论】:

以上是关于Redshift 查询忽略 LIMIT 子句的主要内容,如果未能解决你的问题,请参考以下文章

LIMIT和OFFSET

需要 Where 子句中的属性 (Redshift)

如何为 Amazon redshift 数据库编写查询,使相关查询的 where 子句具有两个条件?

参数化 PDO 查询和“LIMIT”子句 - 不起作用 [重复]

LIMIT 子句导致 mysql 查询的语法错误[关闭]

codeigniter 活动记录获取查询和不带 LIMIT 子句的查询