根据https://cloud.google.com/bigquery/querying-data#asynchronous-queries列出的BigQuery文档:
通过BigQuery API有两种类型的查询。同步和异步。 Async使用提供的示例代码完美地为我工作,但是同步没有。
如果您点击上面的链接,则会显示我所指的示例代码。我注意到它实际上并没有等到结果可用。如果我在time.sleep(15)
之前插入while True
,我的结果会按预期返回。如果没有,则返回空结果集。
官方文档示例使用查询:
"""SELECT word, word_count
FROM `bigquery-public-data.samples.shakespeare`
WHERE corpus = @corpus
AND word_count >= @min_word_count
ORDER BY word_count DESC;
"""
此查询返回非常快,但我的查询需要几秒钟才能返回结果。
我的问题是,为什么文档声明run_sync_query
命令在查询完成之前等待,如果结果实际上无法访问且没有返回结果?
我无法提供我使用的查询,因为它是私有数据源。要生成,您只需要一个需要几秒钟才能运行的查询。
答案 0 :(得分:4)
看起来像request/call is timing out,而不是查询本身。默认时间是10秒。尝试在代码中设置timeout_ms
:
例如(我假设您使用的是Python):
..[auth/client setup stuff]..
query = client.run_sync_query('<your_query>')
query.timeout_ms = 60000 #set the request timeout
query.use_legacy_sql = False
query.use_query_cache = True
query.run()
..[do something with the results]..