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

bq命令行调用存储过程提示Unrecognised name error问题咨询

错误成因
  • 核心原因是你在bq命令行执行的调用语句中,tablename没有作为字符串参数传入,被BigQuery SQL解析器识别为了当前上下文未定义的变量/标识符,因此抛出未识别名称的错误。
  • 你在BQ控制台调用时应该是直接传入了包裹单引号的表名字符串值(例如call procedurename('项目名.数据集名.表名')),参数格式合法所以可以正常执行。
修复方案

你可以选择以下任意一种方式修复调用命令:

  1. 直接传入带引号的表名常量,注意shell中单引号嵌套需要转义,或者外层用双引号包裹SQL语句:
# 外层用双引号包裹SQL,内层表名用单引号
bq query --use_legacy_sql=false "call procedurename('your_project.your_dataset.your_table')"

# 或者转义内层单引号
bq query --use_legacy_sql=false 'call procedurename(\'your_project.your_dataset.your_table\')'
  1. 若需要动态传参,建议使用bq命令行的参数绑定功能,同时避免SQL注入风险:
bq query --use_legacy_sql=false \
--parameter=tablename:STRING:your_project.your_dataset.your_table \
'call procedurename(@tablename)'

额外优化建议:你当前编写的存储过程直接拼接表名到动态SQL中,存在SQL注入风险,建议使用BigQuery内置的BQ.STRING()函数对表名参数做转义处理,修改后的赋值语句为:Set sql1= 'select count(*) from ' || BQ.STRING(tablename);。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:24:04