Google BigQuery的限制?

时间:2018-05-04 23:31:00

标签: sql google-bigquery

Google BigQuery的限制是什么?我试图在大约6 GB的数据上运行SQL语句,但似乎需要很长时间(超过一个小时),然后当我半天后回来检查它时,我发现错误"请求超时。请再试一次"。

我假设6 GB的数据与其他人的数据相比并不算太多,但令我惊讶的是,我这样的时机超时。如果它有帮助,我的SQL查询有点复杂,基本上计算滚动窗口的唯一计数 - 我相信通常需要很长时间。我还检查了要添加到目的地表并且“#34;允许大结果"。

另外,我在Google BigQuery查询编辑器本身运行查询(其中显示了撰写查询)。

编辑:(以下是我正在使用的实际查询)

SELECT t1.time, t1.x, COUNT(DISTINCT t2.x)
FROM `data` AS t1
JOIN `data` AS t2 ON t2.time 
BETWEEN TIMESTAMP_SUB(t1.time, INTERVAL 1 HOUR) AND t1.time
GROUP BY t1.time, t1.x

以下是一些示例数据:

                X
05:20:19        4   <- 2 (4 and 5 are unique)
05:20:19        5   <- 2 (4 and 5 are unique) * same time as before
05:37:18        7   <- 3 (4, 5 and 7 are unique)
05:45:14        4   <- 3 (4, 5, and 7)
05:56:04        4   <- 3 (4, 5, and 7)
06:18:48        6   <- 4 (now 4, 5, 6, and 7)
06:48:34        3   <- 3 (only checks past hour, so now 3, 4, 6)
07:52:48        1   <- 1 (only time in past hour, so only 1)

我有大约6GB的数据

谢谢!

2 个答案:

答案 0 :(得分:0)

我看到的查询中的弱点是在JOIN ON中执行TIMESTAMP_SUB()函数 相反,我会尝试在JOIN之前预先计算它,如下所示

#standardSQL
SELECT t1.time, t1.x, COUNT(DISTINCT t2.x)
FROM (
  SELECT time, x, 
    TIMESTAMP_SUB(time, INTERVAL 1 HOUR) time_sub_hour 
  FROM `data`
) AS t1
JOIN `data` AS t2 
ON t2.time BETWEEN time_sub_hour AND t1.time
GROUP BY t1.time, t1.x

与此同时,正如其他人所提到的那样 - 你基本上会加入相当大的桌子,因此很有可能失败

答案 1 :(得分:0)

如评论中所述:

  • 如果您的问题是&#34;如何进行滚动窗口的唯一计数&#34; - 在https://stackoverflow.com/a/49866033/132438处查看答案。

  • 如果问题是&#34;我可以用6GB数据杀死任何数据库&#34;,答案是&#34;是&#34;:

例如,假设您有500万行数据。那不算太多。但是你做了一个没有过滤器的CROSS JOIN,你想要那些行。

500万行* 500万行= 25万亿行。

你当然不想要25万亿行,如果你想要它们 - 那肯定会花费很多时间。所以请避免爆炸连接。