You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本执行BQ插入SQL时如何转义插入值中的单引号

BigQuery Shell执行插入语句单引号报错解决方案

报错根因

你使用单引号包裹整个SQL作为bq命令的入参,而Shell的单引号语法规则中,单引号内部不允许转义单引号,SQL里Don't携带的单引号会提前闭合外层的单引号,导致整条命令解析失败。

可用解决方法

  • 方法1:Shell单引号特殊转义
    要在Shell单引号包裹的内容中输出单引号,使用'\''格式转义即可,修改后命令如下:
bq query --use_legacy_sql=false --label lm:<local_mkt> --label env:<env_var> '
INSERT INTO `<project>.<dataset_source>.reason_table`(cd,cd1,cd2,cd3,`desc`,dec1) 
VALUES(1,"DCV","AB","AB","SDF","I Don'\''t")'

额外提示:desc是SQL保留关键字,作为字段名使用时建议加反引号包裹,避免触发BQ的SQL语法报错。

  • 方法2:切换外层包裹符为双引号
    将外层包裹SQL的单引号改为双引号,只需要转义内部的双引号和反引号即可,不需要处理单引号:
bq query --use_legacy_sql=false --label lm:<local_mkt> --label env:<env_var> "
INSERT INTO `<project>.<dataset_source>.reason_table`(cd,cd1,cd2,cd3,\`desc\`,dec1) 
VALUES(1,\"DCV\",\"AB\",\"AB\",\"SDF\",\"I Don't\")"
  • 方法3:用Heredoc传入SQL(复杂场景优先)
    如果SQL逻辑复杂、包含大量特殊字符,推荐使用Heredoc的方式传参,几乎不需要额外转义:
bq query --use_legacy_sql=false --label lm:<local_mkt> --label env:<env_var> <<EOF
INSERT INTO `<project>.<dataset_source>.reason_table`(cd,cd1,cd2,cd3,`desc`,dec1) 
VALUES(1,"DCV","AB","AB","SDF","I Don't")
EOF

内容的提问来源于stack exchange,提问作者Yug

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 21:45:04