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

被折叠的 条评论
为什么被折叠?



