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

Azure Function Apps集成Google BigQuery触发AttributeError报错

问题原因

这个报错和BigQuery权限、服务账号配置、查询逻辑都没有关系,是Python依赖版本冲突导致的:

  • 触发点在导入google cloud bigquery SDK的阶段,google.rpc.error_details_pb2模块加载时找不到对应的protobuf描述符,DESCRIPTOR变量为None,调用message_types_by_name属性就抛出了空对象错误
  • 普通本地Python环境没有Azure Function Python Worker自带的依赖干扰,安装的google SDK和protobuf版本匹配,所以代码可以正常运行
  • Azure Function本地调试用的Core Tools、云端运行的Worker都会预置一套protobuf依赖,如果项目自己安装的protobuf版本和Worker预置版本、BigQuery SDK要求的版本范围不匹配,就会触发这个导入错误。
修复方案

按以下顺序操作即可解决:

  1. 固定依赖版本,避免版本自动升级带来的冲突
    在项目根目录的requirements.txt中明确指定兼容的依赖版本,不要留版本范围让pip自动拉取最新版:
    azure-functions
    google-cloud-bigquery==3.5.0
    protobuf==4.21.6
    google-api-core==2.10.2
    googleapis-common-protos==1.56.4
    
    本地先清理虚拟环境里的冲突包再重装:
    pip uninstall -y protobuf google-api-core googleapis-common-protos google-cloud-bigquery grpcio
    pip install -r requirements.txt
    
  2. 调整BigQuery客户端初始化位置
    不要在Python模块的全局作用域直接初始化BigQuery客户端,把初始化逻辑移到Azure Function的入口函数内部,避免模块加载阶段就触发全量依赖导入,同时减少函数冷启动的资源占用:
    import azure.functions as func
    from google.cloud import bigquery as bq
    import os
    import json
    
    def main(req: func.HttpRequest) -> func.HttpResponse:
        # 函数入口内设置凭证、初始化客户端
        os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "path/to/my/service-account-file.json"
        client = bq.Client()
        query_job = client.query("select * from project.dataset.table limit 1")
        rows = [dict(row) for row in query_job.result()]
        return func.HttpResponse(json.dumps(rows), mimetype="application/json")
    
  3. 清理缓存避免旧依赖干扰
    本地调试如果仍复现报错,删除项目下的__pycache__、.python_packages文件夹,再重新启动func调试主机;云端部署时选择远程构建依赖,不要直接上传Windows本地预安装的site-packages包,避免二进制文件和Azure云端Linux运行环境不兼容。
校验标准

触发函数后不再出现Worker加载失败的日志,能正常返回BigQuery的查询结果即为修复完成。如果仍有相同报错,登录Function的Kudu控制台检查site-packages下的protobuf版本,确认是4.21.x系列即可,版本低于3.20.x或者高于4.22.x都会触发这个兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 09:27:34