VS Code launch配置中反引号无法转义SQL查询含特殊字符的列问题
解决方案
问题根因
zsh 默认将反引号识别为命令替换语法标记,即使外层包裹双引号,反引号仍然会被解析,因此你配置的SQL中的反引号内容会被zsh尝试作为命令执行,触发command not found报错。
可落地的修复方案
- 方案1:转义反引号
由于JSON字符串本身需要对反斜杠做转义,你需要给SQL中的每个反引号增加双重转义符,修改后的参数配置如下:
该配置经过JSON解析后会向shell输出"select \\`PPCUSTOM::Amount_of_Dwelling_Insurance\\` from tmp"select \PPCUSTOM::Amount_of_Dwelling_Insurance` from tmp`,转义后的反引号不会被zsh识别为命令替换标记。 - 方案2:用单引号包裹整段SQL
shell中单引号包裹的内容会关闭所有特殊字符解析,你可以在原SQL外层额外套一层单引号,配置如下:"'select `PPCUSTOM::Amount_of_Dwelling_Insurance` from tmp'" - 方案3:替换反引号为双引号引用列名
Spark SQL支持用双引号引用带特殊字符的标识符,只需提前开启配置spark.sql.parser.quotedIdentifiers.enabled=true,之后你可以把SQL中的反引号替换为双引号,JSON中双引号需要转义,配置如下:"select \"PPCUSTOM::Amount_of_Dwelling_Insurance\" from tmp" - 方案4:SQL存为独立文件(最稳妥,适合复杂SQL场景)
把完整SQL语句存入单独的.sql文件,命令行参数改为读取文件内容执行,完全避开命令行特殊字符解析问题。
验证方法
修改配置前可以先在zsh终端手动执行你要运行的完整命令,确认没有报错后再写入launch.json,减少配置调试成本。
内容的提问来源于stack exchange,提问作者Evan Zamir
相关产品推荐
相关产品推荐

