Bigquery API 间歇性返回 http 错误 400“错误请求”

Posted

技术标签:

【中文标题】Bigquery API 间歇性返回 http 错误 400“错误请求”【英文标题】:Bigquery API Intermittently returns http error 400 "Bad Request" 【发布时间】:2015-09-17 14:10:29 【问题描述】:

对于特定查询,我收到 http 错误 400 间歇性返回,但是当我检查查询的文本时,它似乎是正确的,如果我随后将查询复制到 Bigquery GUI 并运行它,它会在没有任何内容的情况下执行问题。查询在 node.js 中构建并通过 gcloud node.js api 提交。我收到的包含查询文本的响应太大,无法在此处发布,但我确实有路径名:

"pathname":"/bigquery/v2/projects/rising-ocean-426/queries/job_aSR9OCO4U_P51gYZ2xdRb145YEA"

似乎只有在查询中包含live_seconds_viewed 计算时才会出现该错误。如果包含live_seconds_viewed 计算的任何部分,则查询会间歇性地失败。

该字段的初始计算为:

CASE WHEN event = 'video_engagement'
     AND range IS NULL
     AND INTEGER(video_seconds_viewed) > 0
     THEN 10
     ELSE 0 END AS live_seconds_viewed,

有时我可以通过更改表达式的顺序来执行查询。但同样,它是间歇性的。

对此的任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

经过漫长而艰苦的试验和错误,我确定查询失败的原因仅仅是查询的字符串长度太长。当从 GUI 执行查询时,显然空白被剥离,因此查询执行,因为没有空白,它足够短以通过大小限制。

当我操纵查询以确定导致问题的部分或部分时,我会无意中将查询的大小减小到关键限制以下并导致查询通过。

如果 Bigquery 的错误响应包含一些关于问题所在的提示,而不是触发 400 错误错误请求并调用它退出,那就太好了。

如果 Bigquery 解析器在确定查询大小时忽略空格会更好。这样,GUI 上的行为将与通过 API 提交查询时的行为相匹配。

【讨论】:

嘿!您提出的两点绝对有效(错误应该更好地表述,API 和 GUI 应该匹配行为)。我建议在 code.google.com/p/google-bigquery/issues/list 的两个单独问题中报告此问题(这是 BigQuery 团队的问题跟踪器。 我怀疑这里还有其他事情发生。查询长度的限制非常大(256 KB),并且 UI 不会去除任何空白。 在 Datastore 上遇到了完全相同的问题。

以上是关于Bigquery API 间歇性返回 http 错误 400“错误请求”的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 中的服务限制

调用 GMAIL API 时出现间歇性错误 - “调用者没有权限”

用于 bigquery 的正则表达式在 /api 之后返回所有路径

现有数据集的 BigQuery API 查询作业返回 404

在wso2 API管理器中发布API时间歇性失败

spring cloud 调用接口间歇性返回http 500 - Internal Server Error的错误