首先让我解释一下这个问题。 我有500个独特的用户。来自这些用户的数据被分成较小的gzip文件(假设每个用户平均有25个文件)。我们已将每个拆分gzip文件作为BiqQuery中的单独表加载。因此,我们的数据集中有13000个表。
现在,我们必须运行时间范围查询以从每个用户检索一些数据。我们有一个用户约500-1000个不同的时间范围。我们希望将所有这些时间范围组合成一个具有逻辑OR和AND
的查询 WHERE (timestamp >2 and timestamp <3) OR (timestamp >4 and timestamp <5) OR .............. and so on 1000 times
并在13000个表格上运行它们
我们自己的测试显示Bigquery的查询长度限制为10000个字符?
如果我们将条件分成多个查询,我们的每日配额限制超过20,000个。
是否有任何相关工作,以便我们可以在不达到每日配额限制的情况下运行这些查询?
由于
JR
答案 0 :(得分:2)
我可以想到两件事:
我已将500000多个JSON gzip文件加载到一个表中,查询更容易。
而不是
WHERE (timestamp > "2014-06-25:00:00:00" AND timestamp < "2014-06-26:00:00:00")
你可以表达
WHERE LEFT(timestamp,10) = "2014-06-25"
希望这也可以减少你的角色长度限制。
答案 1 :(得分:1)
当我在WHERE条件下传递数组的大列表时,我遇到了类似的大查询SQL查询长度限制为1024K个字符的问题。
为解决此问题,我使用了参数化查询。 https://cloud.google.com/bigquery/docs/parameterized-queries
答案 2 :(得分:0)
使用参数化查询时,查询有效负载上限将增加到10MB,而不是1MB。那帮助了我。
这是我尝试查找参数化查询的有效负载大小的限制时收到的错误消息:
{
"code" : 400,
"errors" : [ {
"domain" : "global",
"message" : "Request payload size exceeds the limit: 10485760 bytes.",
"reason" : "badRequest"
} ],
"message" : "Request payload size exceeds the limit: 10485760 bytes.",
"status" : "INVALID_ARGUMENT"
}