为什么BigQuery API调用需要这么长时间



我正在尝试使用带有Python客户端库的BigQuery API来查询BigQuery。

然而,出于某种原因,我的质疑似乎是";挂起";在调用BigQuery API时持续大约150秒,即在以下行(完整代码示例请参见下文(:results = client.query(query)

注意:实际的查询是什么并不重要。因此,在下面的示例代码中,我只是将SELECT 1作为一个查询

有趣的是,第一个查询只有一个延迟——所有后续查询都和预期的一样快。

我已经在BQ的查询历史中检查了查询时间,它确认所有查询都不到一秒钟。因此,花费这么长时间的肯定不是实际的查询,而是其他事情。

我猜这可能与身份验证有关,但我不确定为什么会这样,或者我是否做错了什么,也不确定如何加快速度,最重要的是。

如有任何提示,不胜感激。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# IMPORTS
from google.cloud import bigquery
import os 
from datetime import datetime
print(f"{datetime.now().strftime('%H:%M:%S')}: Starting script...")
# INIT BQ
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "my_credentials.json"
client = bigquery.Client()
# QUERY 1
print(f"{datetime.now().strftime('%H:%M:%S')}: Starting query 1...")
query1 = """SELECT 1 AS mycol LIMIT 1"""
print(f"{datetime.now().strftime('%H:%M:%S')}: Making API request...")
results1 = client.query(query1) # <-- this is where the 150s delay happens
for row in results1:
print(f"{datetime.now().strftime('%H:%M:%S')}: Results: {row['mycol']}")
# QUERY 2
print(f"{datetime.now().strftime('%H:%M:%S')}: Starting query 2...")
query2 = """SELECT 2 AS mycol LIMIT 1"""
print(f"{datetime.now().strftime('%H:%M:%S')}: Making API request...")
results2 = client.query(query2) # <-- this is super-quick
for row in results2:
print(f"{datetime.now().strftime('%H:%M:%S')}: Results: {row['mycol']}")
#EOF

这是输出(在我的本地机器上运行(:

22:33:48: Starting script...
22:33:48: Starting query 1...
22:33:48: Making API request... # <-- this is taking ~150s
22:36:24: Results: 1
22:36:24: Starting query 2...
22:36:24: Making API request...
22:36:26: Results: 2

好的,经过两天的努力寻找解决方案,昨天花了160秒的完全相同的脚本现在只需4秒就可以运行了。谷歌方面似乎出了问题。

相关内容

最新更新