首页 > 解决方案 > 运行相关子查询时引发 sql 错误

问题描述

我在 Intellij Maven IDE 中运行以下 spark SQL 查询,

SELECT seq_no, 
       amount, 
       (select max(b.amount) 
        from premium b 
        where b.seq_no < a.seq_no) last_high_prem
FROM premium a

得到以下错误,

线程“主”org.apache.spark.sql.AnalysisException 中的异常:相关标量子查询只能包含相等谓词:(seq_no#11#32 < seq_no#11);

我理解使用相等运算符时的相关查询,然后只在 spark SQL 中工作。有什么方法可以克服这个问题。

我知道我们可以做到 hiveql。但是需要在我的本地机器上设置 hadoop 和 hive。请让我知道如何缓解此问题。

标签: sqlapache-sparkapache-spark-sqlcorrelated-subquery

解决方案


我对 Spark SQL 几乎一无所知,但在我看来,您的问题与相关子查询有关,在大多数品牌的 SQL 中,此查询不是必需的。Spark 确实接受该max函数作为Window Function

你可以做:

SELECT seq_no, 
       amount, 
       max(amount) OVER (ORDER BY seq_no ROWS BETWEEN UNBOUNDED PRECEDING and 1 PRECEDING) AS last_high_prem
FROM premium 

注意:您可能还需要一个partition by短语,但不需要您提供的确切查询。


推荐阅读