zoukankan      html  css  js  c++  java
  • spark sql correlated scalar subqueries must be aggregated 错误解决

    最近在客户中使用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() 函数,这样就可以确保子查询返回结果只有一个。

     

  • 相关阅读:
    java设计模式
    漏桶算法工具类
    http请求requestUtils
    去掉字符串中特殊符号造成的空格
    java 分布式id生成算法
    java枚举
    java 32个Java面试必考点
    配置tomcat下war包可以自压缩
    tomcat (选号)公司tomcat无页面解决
    docker 12 docker容器数据卷
  • 原文地址:https://www.cnblogs.com/chenfool/p/11179438.html
Copyright © 2011-2022 走看看