如何在Spark SQL或COALESCE表达式中引用含括号与小数点的CSV列?
解决方案:Spark SQL中引用含特殊字符的列名
针对你的场景,Spark SQL无法直接解析含括号、小数点、空格的列名,必须用特定的标识符引号包裹列名,以下两种方法可解决问题(仅需修改BigQuery配置表中的SQL公式字符串):
方法一:使用反引号包裹列名
这是Spark SQL的标准写法,用反引号(`)将整个列名完整包裹:
COALESCE(`Actual Tilt(0.1degree)`, NULL)
注意在BigQuery中存储该字符串时,需确保反引号未被错误转义:
- 若用反引号包裹整个SQL公式存储,内部反引号无需转义,例如:
`COALESCE(`Actual Tilt(0.1degree)`, NULL)` - 若用单引号包裹存储,内部反引号直接保留即可,例如:
'COALESCE(Actual Tilt(0.1degree), NULL)'
方法二:使用方括号包裹列名(Hive兼容语法)
如果反引号方式仍报错,可尝试Hive风格的方括号引用,Spark默认支持该语法:
COALESCE([Actual Tilt(0.1degree)], NULL)
方括号能直接识别包含特殊字符的列名,无需额外配置,适配大多数Spark环境。
原理说明:Spark SQL对含特殊字符的列名要求必须用标识符引号包裹,反引号是Spark原生标准,方括号是Hive兼容语法,两种方式都能让Spark跳过特殊字符的语法解析,正确匹配源CSV中的列名。
内容的提问来源于stack exchange,提问作者Suhani Bhatia




