更新时间:2024-11-26 GMT+08:00
分享

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

本章节仅适用于MRS 3.3.1-LTS及之后版本。

配置场景

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

使用约束

  • 支持形如“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 场景:在Spark客户端的“{客户端安装目录}/Spark/spark/conf/spark-defaults.conf”配置文件中进行设置,修改如下参数:

    参数

    说明

    默认值

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

    设置为true,Spark将支持不带聚合函数的关联子查询语法。

    false

  • spark-beeline场景,配置JDBCServer自定义参数:
    1. 登录FusionInsight Manager,选择“集群 > 服务 > Spark > 配置 > 全部配置 > JDBCServer(角色) > 自定义”,在参数“custom”中添加配置“spark.sql.legacy.correlated.scalar.query.enabled”值为“true”。

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

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

相关文档