使用Python的BigQuery客户端|超时和轮询问题

回答 4 浏览 2227 2022-12-04

我试图通过初始化BQ客户端在BQ数据库上执行一条SQL语句。这已经顺利运行了一段时间,但最近看到一个问题。

我的代码在试图等待来自数据库的结果时失败了

query_job = client.query(QUERY)  # API request to start the query    
db_rslt = query_job.result()     # Wait for the query to return results

以下是错误信息:

File "/opt/conda/default/lib/python3.7/site-packages/google/cloud/bigquery/job.py", line xxx, in result super(QueryJob, self).result(retry=retry, timeout=timeout) File "/opt/conda/default/lib/python3.7/site-packages/google/cloud/bigquery/job.py", line xxx, in result return super(_AsyncJob, self).result(timeout=timeout) File "/opt/conda/default/lib/python3.7/site-packages/google/api_core/future/polling.py", line xxx, in result self._blocking_poll(timeout=timeout, retry=retry, polling=polling) TypeError: _blocking_poll() got an unexpected keyword argument 'retry'

在结果方法中添加了超时参数,但没有起到作用。

Mohan_2523 提问于2022-12-04
库的版本?John Hanley 2022-12-04
@JohnHanley 我很抱歉,你能不能更具体地说明你所指向的是哪些库,并提供任何关于如何检查它们的指导。谢谢Mohan_2523 2022-12-04
pip freeze将打印出已安装的Python软件包和版本信息的列表。John Hanley 2022-12-04
4 个回答
#1楼
得票数 5

这取决于你所安装的google-cloud-bigquery库的版本,如果你使用的是1.x版本,请确保将google-api-core设置为低于1.34.0的版本。

实际发生的情况是,当你安装google-cloud-bigquery时,其他一些google相关的库也会自动安装,google-api-core就是这些库之一。然而,一个更高的版本正在被安装,从而导致了这个问题。

在我的例子中,设置我的google-api-core==1.33.2就可以解决这个问题。其他解决方案是将google-cloud-bigquery升级到更高版本。

Charbel 提问于2022-12-06
#2楼 已采纳
得票数 1

7天前,谷歌发布了一个更新google-api-core==1.34.0的错误修复。我想,如果你没有使用google-cloud-bigquery的后期版本,这引入了一些破坏性的变化。你可以选择。

  1. google-api-core固定到以前的工作版本(例如1.33.2)。
  2. google-cloud-bigquery升级到最新的版本。
SparklinZ 提问于2022-12-09
#3楼
得票数 0

我通过将bigquery的版本改为最新的:'google-cloud-bigquery==3.4.0',解决了这一问题。

Jahd Jabre 提问于2022-12-06
Jeff Schaller 修改于2022-12-06
#4楼
得票数 0

我也遇到了这种情况,我的Python图像是3.8.13:bulleye。 它使用的是下面的google库的堆栈。

google-auth==1.33.0
google-cloud-bigquery==1.25.0
google-cloud-firestore==2.3.1

把它们改成

db-dtypes==1.0.0
google-auth==2.6.0
google-cloud-bigquery==3.0.1
google-cloud-firestore==2.5.3

解决了这些问题。

db-dtypes是新版本的谷歌云库所需要的。

Jim LK Yu 提问于2022-12-19