配置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场景:
- 安装Spark客户端。
详细操作请参考安装MRS客户端。
- 使用客户端安装用户登录Spark客户端节点。
在Spark客户端的“{客户端安装目录}/Spark/spark/conf/spark-defaults.conf”配置文件中进行设置,修改如下参数:
参数
说明
取值示例
spark.sql.legacy.correlated.scalar.query.enabled
Spark是否支持不带聚合函数的关联子查询语法。
- true:支持不带聚合函数的关联子查询语法。
- false:不支持不带聚合函数的关联子查询语法。
true
spark-beeline场景:
- 登录FusionInsight Manager系统。
详细操作请参考访问集群Manager。
- 选择“集群 > 服务 > Spark > 配置 > 全部配置 > JDBCServer(角色) > 自定义”,在参数“custom”中添加配置“spark.sql.legacy.correlated.scalar.query.enabled”值为“true”。
- 单击“保存”,根据界面提示保存参数。单击“实例”,勾选所有JDBCServer实例,选择“更多 > 重启实例”,根据界面提示重启JDBCServer实例。
如果关联子查询有多行匹配(>1), 则会执行异常。
重启期间将无法对外提供服务,可能会影响集群的上层业务正常运行,请在业务空闲期或确认操作无影响后再执行本操作。