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

 

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

SELECT   A.dep_id,
         A.employee_id,
         A.age,
         (SELECT  age FROM employee B WHERE A.dep_id = B.dep_id) max_age
FROM     employee A
ORDER BY 1,2

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

SELECT   A.dep_id,
         A.employee_id,
         A.age,
         (SELECT  MAX(age) FROM employee B WHERE A.dep_id < B.dep_id) max_age
FROM     employee A
ORDER BY 1,2

 

  • 问题分析

实际上,发生问题的地方是 子查询 “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() 函数,这样就可以确保子查询返回结果只有一个。

 

相关文章:

  • 2022-01-22
  • 2021-12-04
  • 2021-06-20
  • 2022-12-23
  • 2021-04-15
  • 2022-01-15
  • 2021-10-19
  • 2022-12-23
猜你喜欢
  • 2021-07-23
  • 2021-07-15
  • 2021-03-31
  • 2021-04-27
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案