Bigquery API 间歇性 returns http 错误 400 "Bad Request"

Bigquery API Intermittently returns http error 400 "Bad Request"

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

"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,

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

如有任何帮助,我们将不胜感激。

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

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

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

如果 Bigquery 解析器在确定查询大小时忽略白色 space 就更好了。这样,GUI 上的行为将与通过 API.

提交查询时的行为相匹配