sql - 运行相关子查询时引发 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。请让我知道如何缓解此问题。
解决方案
我对 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
短语,但不需要您提供的确切查询。
推荐阅读
- reporting-services - SSRS 报告卡住加载状态,甚至 executionlog3 说已完成
- android - 将 ViewModel 用于 ListView 和
在列表视图中? - python - 在 plotly 折线图上隐藏一条线
- java - 为什么要在 Java 的接口 X 中声明 X 类型的变量?
- sql - Microsoft 在查询中使用 ORDER BY 中的 switch 语句时访问更改数据类型
- python - 如何使用 user_passes_test 查看特定页面?
- dafny - 验证 dafny 中的谓词是否适用于所有整数
- python - 计算 pyspark 数据框中的出现次数
- javascript - 随机图像和配对文本选择 javascript
- javascript - 在 Jest 环境被拆除后导入文件