为啥 BigQuery API 调用需要这么长时间?
Posted
技术标签:
【中文标题】为啥 BigQuery API 调用需要这么长时间?【英文标题】:Why does BigQuery API call take so long?为什么 BigQuery API 调用需要这么长时间? 【发布时间】:2021-04-19 19:11:39 【问题描述】:我正在尝试使用 BigQuery API 和 Python 客户端库查询 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
【问题讨论】:
响应头中有什么?特别是关于平台的速率限制?授权期间会发生什么(这显然是原因)?在第一个查询中发生了多少实际请求? 不知道如何回答。你能告诉我如何编辑我的代码让你知道吗? 您能否启用详细日志记录以查看问题所在?我的建议是获取任何日志信息,如果您无法从那里弄清楚,请在 GitHub 上提出问题,将其作为潜在错误提出! 如何启用详细日志记录? 您的项目或组织中是否有特殊配置?插槽和预订? 【参考方案1】:好的,经过两天的尝试寻找解决方案,昨天花费了 160 秒的完全相同的脚本现在运行了大约 4 秒。 Google 方面似乎出了点问题。
【讨论】:
以上是关于为啥 BigQuery API 调用需要这么长时间?的主要内容,如果未能解决你的问题,请参考以下文章