我正在获取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,
有时我只需更改表达式的顺序就可以执行查询。但同样,这是间歇性的。
对此的任何帮助将不胜感激。
答案 0 :(得分:2)
经过漫长而艰苦的尝试和错误,我已经确定查询失败的原因仅仅是查询的字符串长度太长。当从GUI执行查询时,显然白色空间被剥离,因此执行查询,因为没有空格,它足够短以通过大小限制。
当我操纵查询以确定导致问题的部分或部分时,我会无意中将查询的大小减小到关键限制以下并导致查询通过。
如果来自Bigquery的错误响应包含一些关于问题的提示而不是解决400错误错误请求并调用它退出将会很棒。
如果Bigquery解析器在确定查询大小时会忽略空格,那会更好。通过这种方式,GUI上的行为将与通过API提交查询时的行为相匹配。