我在BigQuery中有一个大表,我必须经历,获取所有数据并在我的GAE应用程序中处理它。由于我的表将是大约4米行,我决定我必须通过在此处的代码示例中实现的分页机制获取数据> https://cloud.google.com/bigquery/querying-data
def async_query(query):
client = bigquery.Client()
query_job = client.run_async_query(str(uuid.uuid4()), query)
query_job.use_legacy_sql = False
query_job.use_query_cache = False
query_job.begin()
wait_for_job(query_job)
query_results = query_job.results()
page_token = None
output_rows = []
while True:
rows, total_rows, page_token = query_results.fetch_data(max_results = 200, page_token = page_token)
output_rows = output_rows + rows
if not page_token:
break
def wait_for_job(job):
while True:
job.reload() # Refreshes the state via a GET request.
if job.state == 'DONE':
if job.error_result:
raise RuntimeError(job.errors)
return
time.sleep(1)
但是当我执行它时,我收到一个错误:
DeadlineExceededError: The overall deadline for responding to the HTTP request was exceeded.
当max_results参数>表大小它工作正常。当max_results<需要表大小和分页 - 我收到此错误。 我错过了什么吗?
答案 0 :(得分:0)
该错误表示您的整个请求处理程序处理时间过长。很可能是因为分页导致多次query_results.fetch_data
次迭代。
您可能需要查看:
您可能需要重新考虑一下您的应用,或者尝试不立即获得整个结果,而是: