更新时间:2025-07-14 GMT+08:00

配置Spark SQL语法支持关联子查询不带聚合函数

操作场景

开源版本Spark SQL强制要求子查询关联中必须使用聚合函数,如果未使用聚合函数将报错“Error in query: Correlated scalar subqueries must be aggregated”。MRS支持配置Spark不带聚合函数的关联子查询SQL语法。

约束与限制

  • 本章节仅适用于MRS 3.3.1-LTS及之后版本。
  • 支持形如“select id, (select group_name from emp2 b where a.group_id=b.group_id) as banji from emp1 a”的关联子查询SQL语法。
  • 支持形如“select id, (select distinct group_name from emp2 b where a.group_id=b.group_id) as banji from emp1 a”的关联子查询SQL语法。

配置参数

spark-sql场景

  1. 安装Spark客户端。

    详细操作请参考安装MRS客户端

  2. 使用客户端安装用户登录Spark客户端节点。

    在Spark客户端的“{客户端安装目录}/Spark/spark/conf/spark-defaults.conf”配置文件中进行设置,修改如下参数:

    参数

    说明

    取值示例

    spark.sql.legacy.correlated.scalar.query.enabled

    Spark是否支持不带聚合函数的关联子查询语法。

    • true:支持不带聚合函数的关联子查询语法。
    • false:不支持不带聚合函数的关联子查询语法。

    true

spark-beeline场景:

  1. 登录FusionInsight Manager系统。

    详细操作请参考访问集群Manager

  2. 选择“集群 > 服务 > Spark > 配置 > 全部配置 > JDBCServer(角色) > 自定义”,在参数“custom”中添加配置“spark.sql.legacy.correlated.scalar.query.enabled”值为“true”。

  1. 单击“保存”,根据界面提示保存参数。单击“实例”,勾选所有JDBCServer实例,选择“更多 > 重启实例”,根据界面提示重启JDBCServer实例。

    如果关联子查询有多行匹配(>1), 则会执行异常。

    重启期间将无法对外提供服务,可能会影响集群的上层业务正常运行,请在业务空闲期或确认操作无影响后再执行本操作。