BigQuery计划查询中能否调用存储过程?调用时遇「Procedure is not found」错误求助
解决BigQuery计划查询调用存储过程报"Procedure is not found"的问题
我之前也碰到过这个问题,别着急,咱们一步步来排查解决:
1. 确认计划查询的目标项目与存储过程所在项目匹配
计划查询创建时会默认使用当前选中的项目,但有时候会和存储过程所在项目不匹配——哪怕你在CALL语句里写了完整路径,也可能因为执行上下文的问题识别失败:
- 编辑计划查询时,找到「目标项目」选项,确保它和存储过程所在的项目完全一致;
- 或者在CALL语句里用反引号包裹完整路径,比如:
CALLyour-project-id.your-schema.your-procedure(),避免项目/ schema名称带特殊字符(比如连字符、大写字母)导致识别异常。
2. 检查计划查询服务账号的权限
计划查询是用BigQuery专属服务账号执行的,这个账号可能没有访问存储过程的权限:
- 给计划查询使用的服务账号添加
bigquery.routines.invoker角色(可针对存储过程所在的schema或整个项目); - 同时确保该账号拥有
bigquery.jobs.create权限,以及存储过程执行时涉及的表的读写权限。
3. 确保存储过程是持久化的
如果你创建的是临时存储过程(比如用CREATE TEMP PROCEDURE),它只会在当前会话存在,计划查询作为独立执行会话根本访问不到。确认你的存储过程是用CREATE PROCEDURE创建的持久化过程。
4. 强制指定执行的schema
有时候计划查询的默认schema和你撰写查询时的不一样,导致找不到过程:
在计划查询的SQL开头加上USE your-project-id.your-schema;,强制指定执行上下文,再调用存储过程。比如:
USE `my-project`.`my-schema`; CALL `my-project`.`my-schema`.`my-procedure`();
按照这些步骤排查,应该就能解决你遇到的"Procedure is not found"错误了。
内容的提问来源于stack exchange,提问作者Thiago
相关产品推荐
相关产品推荐

