Spark中带空格列名用反引号在WHERE子句报错问题
解决Synapse Spark中带空格字段在WHERE子句的语法错误问题
可行解决方案
方案1:使用双引号包裹带空格的字段名
在Synapse的SQL语境下,双引号是标识含特殊字符(如空格)标识符的更可靠方式,替换反引号即可解决WHERE子句的语法错误:
Scala代码示例:
%%spark df1.createOrReplaceTempView('temp1') df1 = sqlContext.sql("""select "Customer Id" from temp1 where "Customer Id" = 100 """)
SQL魔术命令示例:
%%sql select "Customer Id" from temp1 where "Customer Id" = 100
方案2:给字段起别名,在WHERE子句中使用别名
通过SELECT子句给带空格的字段设置别名,后续WHERE子句直接使用别名,避免重复处理特殊标识符:
Scala代码示例:
%%spark df1.createOrReplaceTempView('temp1') df1 = sqlContext.sql("""select `Customer Id` as customer_id from temp1 where customer_id = 100 """)
SQL魔术命令示例:
%%sql select `Customer Id` as customer_id from temp1 where customer_id = 100
问题原因
Synapse Spark的SQL解析器对不同子句的标识符处理逻辑存在差异:SELECT子句中反引号可被正确识别,但WHERE子句的解析受Synapse无服务器池SQL方言影响,反引号的兼容性不足。双引号在Synapse的SQL规范中是标准的特殊标识符包裹方式,而使用别名则直接规避了在WHERE子句中处理带空格字段的问题。
内容的提问来源于stack exchange,提问作者DataAIWorld
相关产品推荐
相关产品推荐

