如何覆盖 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 客户端 - 超时参数的含义,以及如何设置查询结果超时

Snackbar Vuetify - 超时后覆盖方法

feign服务间调用超时时间

如何通过覆盖 SaveChanges() 的默认行为来执行多个 SaveChanges() 调用?

java客户端调用webservice时 连接超时知道是网络原因 ,如何重试如果不重试程序就死琐了,

覆盖 WebSphere 设置的事务超时?