3

对于特定查询,我间歇性地返回 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,

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

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

4

1 回答 1

2

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

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

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

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

于 2015-09-17T15:33:23.340 回答