调用BigQuery对象to_dataframe()时报错secure_channel()存在意外参数default_scopes
问题根因
安装dbt==0.19.0时触发了依赖降级,该版本的dbt强制依赖低版本的grpcio-gcp包,旧版本grpcio-gcp的secure_channel()方法不支持default_scopes参数,而当前环境的google-api-core 1.23.0调用该方法时会默认传入该参数,最终触发类型错误。
解决方案
方案1:快速恢复业务(无需修改依赖)
调用to_dataframe()时主动禁用BigQuery Storage客户端,报错逻辑正是在创建该客户端时触发,禁用后会走默认REST接口拉取数据,小数据量场景下无明显性能差异,修改代码如下:
our_df = query_result.to_dataframe(create_bqstorage_client=False)
方案2:修复依赖兼容性
升级grpcio-gcp到支持default_scopes参数的版本,最低要求为0.2.2,该版本和dbt==0.19.0要求的grpc版本范围完全兼容,不会影响dbt的正常使用:
pip install --upgrade grpcio-gcp>=0.2.2
方案3:降级google-api-core
如果方案2存在其他依赖冲突,可以将google-api-core降级到1.22.0版本,该版本不会向secure_channel()传入default_scopes参数,也可解决问题:
pip install google-api-core==1.22.0
以上方案执行后均可直接运行原有代码验证是否修复。
内容的提问来源于stack exchange,提问作者Canovice
相关产品推荐
相关产品推荐

