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】:
我能想到有两种方法可以限制您从采石场获得的结果数量,它们是 LIMIT
和 TOP
试试这个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 子句的主要内容,如果未能解决你的问题,请参考以下文章
如何为 Amazon redshift 数据库编写查询,使相关查询的 where 子句具有两个条件?