强制presto保持where子句的顺序

vcirk6k6  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(609)

我正在尝试运行以下查询:

SELECT * FROM foo WHERE cardinality(bar) > 0 AND bar[1] = '...';

然而,我得到了 Query failed: Array subscript out of bounds . 我假设这是因为presto试图通过检查 bar[1] = '...' 检查前 cardinality(bar) > 0 . 有没有办法强迫普雷斯托维持条款的秩序?

lvmkulzt

lvmkulzt1#

当我需要的时候,我用两种方法解决了这个问题。
使用 element_at 函数而不是[]下标表示法。 element_at 索引超过数组结尾时返回null,因此可以将示例简化为一个条件。 element_at 也适用于select子句,但where子句不需要它:

SELECT bar[1] FROM foo WHERE element_at(bar,1) = '...';

使用 with 条款:

WITH (SELECT * FROM foo WHERE cardinality(bar) > 0) AS populated_foo
SELECT * FROM populated_foo WHERE bar[1] = '...';

第二种方法对于您的示例没有多大意义,但是我发现它对于涉及数组中的行对象的更复杂的条件很有用。

相关问题