BigQuery 最大查询长度字符可以解决
Posted
技术标签:
【中文标题】BigQuery 最大查询长度字符可以解决【英文标题】:BigQuery max query length characters work around 【发布时间】:2014-06-25 10:14:36 【问题描述】:首先让我解释一下这个问题。 我有 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
【问题讨论】:
【参考方案1】:当我在 WHERE 条件下传递一个大数组列表时,我遇到了 Big Query SQL Query 长度限制为 1024K 个字符的类似问题。
为了解决它,我使用了参数化查询。 https://cloud.google.com/bigquery/docs/parameterized-queries
【讨论】:
如何解决?参数化查询中的参数长度/数量是否没有限制? @TheDarkLord,是的,这解决了它。 1024K 字符限制用于查询字符串,这通过我假设的不同方式提供参数。【参考方案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"
希望这也可以减少您的字符长度限制。
【讨论】:
假设你的时间戳列实际上有一个 TIMESTAMP 类型,当你在它上面运行 LEFT() 时你会得到一个错误。改用这个:WHERE DATE(timestamp) = "2014-06-25" 感谢我们已经在考虑减少表格。那肯定行得通。单独合并它们不是一种选择,因为数据大约为 1.5 TB。不知何故,错过了将具有相同架构的不同文件加载到同一个大查询表中将条目附加到行中。所以最终首先单独加载所有内容。似乎必须重新加载所有内容:-)【参考方案3】:当您使用参数化查询时,大查询负载限制增加到 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"
【讨论】:
以上是关于BigQuery 最大查询长度字符可以解决的主要内容,如果未能解决你的问题,请参考以下文章