如何覆盖 BigQuery 方法调用的默认超时
Posted
技术标签:
【中文标题】如何覆盖 BigQuery 方法调用的默认超时【英文标题】:How to override default time out for BigQuery method calls 【发布时间】:2020-07-20 16:19:19 【问题描述】:我了解 BigQuery 的默认超时时间为 1 分钟。我想知道在调用 Operation 方法期间或在初始化 BigQuery 客户端时是否有任何方法可以覆盖默认超时值。我在 BigQuery 文档中看到了作业的超时选项,但在我的情况下,我在没有作业的情况下集成到 BigQuery。
我尝试将选项中的 'timeoutMs:1' 传递给方法调用,但没有效果任何指针都会有所帮助
【问题讨论】:
【参考方案1】:尝试将其作为作业而不是查询运行:
const [job] = await bigquery.createQueryJob(options);
console.log(`Job $job.id started.`);
// Wait for the query to finish
const [rows] = await job.getQueryResults();
// Print the results
console.log(`Rows: $rows`);
另外,timeoutMs 以毫秒为单位。以下是选项对象中可用选项的完整列表: Method: jobs.query
【讨论】:
嗨尼克,谢谢,但我有一个要求,我不想在哪里使用 Job。 您是否尝试在选项对象中将 timeoutMs 调整为更大的数字?如果将其设置为大于 1 分钟会发生什么?还是更少? 完全没有效果。我执行了一个查询,这将需要一些时间来获取记录,这就是为什么我尝试将 timeoutMs 添加为 1 ms 以检查我是否收到超时错误,但事实并非如此 也许谷歌有一个值验证,因为我猜没有查询会在 1 毫秒内完成。如果您现在还没有尝试,请尝试将其设置为 10000(10 秒),然后看看会发生什么。【参考方案2】:正如您在官方source code 中看到的,query
操作指的是job.query
,并提到我们可以在此page 看到完整的选项设置。
在提到的页面中,我们可以找到关于timeoutMs
的以下信息:
可选。等待查询完成的时间,以毫秒为单位, 在请求超时并返回之前。请注意,这只是一个 请求超时,而不是查询。如果查询需要更长的时间 运行超过超时值,调用返回没有任何结果,并且 将“jobComplete”标志设置为 false。你可以打电话 jobs.getQueryResults() 等待查询完成并读取 结果。默认值为 10000 毫秒(10 秒)。
由于该页面被提及为完整参考,因此我认为这是默认行为。
【讨论】:
如果答案有用,请考虑投票。如果它完全回答了问题,请考虑接受。您可以点击 ✓ 接受它并点击 ▲以上是关于如何覆盖 BigQuery 方法调用的默认超时的主要内容,如果未能解决你的问题,请参考以下文章
BigQuery Python 客户端 - 超时参数的含义,以及如何设置查询结果超时
如何通过覆盖 SaveChanges() 的默认行为来执行多个 SaveChanges() 调用?