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

     

  • 相关阅读:
    搭建微信小程序开发环境
    DOM 的classList 属性
    mui监听多个下拉刷新当前处于哪个选项卡
    mui常用功能链接地址
    css 弹性盒模型Flex 布局
    定义变量let,const
    微信小程序从零开始开发步骤(六)4种页面跳转的方法
    微信小程序从零开始开发步骤(五)轮播图
    展开符和解构赋值
    POJ 3660 Floyd传递闭包
  • 原文地址:https://www.cnblogs.com/chenfool/p/11179438.html
Copyright © 2011-2022 走看看