select报错 spark_spark sql correlated scalar subqueries must be aggregated 错误解决

博主在使用Spark SQL做表报处理、数据关联时,遇到“correlated scalar subqueries must be aggregated”错误。以具体SQL为例,分析出是子查询可能返回多个结果集导致。解决思路是在子查询中增加Max()函数,确保子查询只返回一个结果。

最近在客户中使用spark sql 做一些表报处理,但是在做数据关联时,老是遇到 “correlated scalar subqueries must be aggregated” 错误

举一个例子,这个sql 在oracle 或者 postgresql 都是可以正常运行的,但是在spark sql 就会报错“correlated scalar subqueries must be aggregated”

SELECTA.dep_id,

A.employee_id,

A.age,

(SELECT age FROM employee B WHERE A.dep_id =B.dep_id) max_ageFROMemployee AORDER BY 1,2

在参考博客参考博客中就有一个解决方案

SELECTA.dep_id,

A.employee_id,

A.age,

(SELECT MAX(age) FROM employee B WHERE A.dep_id

问题分析

实际上,发生问题的地方是 子查询 “SELECT  age FROM employee B WHERE A.dep_id = B.dep_id”。

为什么会发生这个错误呢?

因为在spark sql 中,执行select 的关键字地方,如果sql 中依然包括子查询,这个时候有一个问题,就是如果子查询返回多个结果集会有不可预期的结果,所以就会报错:

“correlated scalar subqueries must be aggregated”。

然后解决的思路就是简单了,如果spark sql 担心select 关键字中当有子查询并且会返回多个记录,那么我们只要保证 子查询 只会返回一个结果,就能够完美解决这个问题,所以我们改造的思路就是在子查询中,增加 Max() 函数,这样就可以确保子查询返回结果只有一个。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值