sql - Google BigQuery 的限制?
问题描述
Google BigQuery 的限制是什么?我正在尝试对大约 6 GB 的数据运行 SQL 语句,但它似乎需要很长时间(一个多小时),然后当我半天后回来检查时发现错误“请求超时。请重试”。
我假设 6 GB 的数据与其他人可能拥有的数据相比并不算多,但令我惊讶的是,我会这样超时。如果有帮助,我的 SQL 查询会有点复杂,并且本质上会计算滚动窗口唯一计数——我相信这通常需要很长时间。我还检查了添加到目标表并“允许大结果”。
此外,我正在 Google BigQuery 查询编辑器本身(其中显示 Compose Query)中运行查询。
编辑:(以下是我正在使用的实际查询)
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 的数据
谢谢!
解决方案
我看到的查询中的弱点是在 JOIN ON 中执行 TIMESTAMP_SUB() 函数
相反,我会尝试在加入之前预先计算它,如下所示
#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
同时,正如其他人所提到的 - 你本质上是交叉加入相当大的桌子,因此失败的可能性很大
推荐阅读
- php - 在heroku中找不到带有semantic-ui-css icon.woff2 404的Laravel
- javascript - 如何聚焦 Material UI 的 InputLabel?
- javascript - 使用添加按钮添加两个依赖选择
- kubernetes - 使用 Kubernetes 为 GIS 应用程序调整资源大小
- php - Laravel Nova 图像存储名称问题
- javascript - 如何在问题中添加图像?
- python - 将 PNG 文件加载到 TensorFlow 中
- c++ - 交叉编译项目本地的 Eigen 库错误:找不到 -lroot/testappt/local/eigen
- php - 用非英文字符更新 MySQL 表不起作用,排序规则和字符集都设置为 utf8 或 utf8mb4
- php - Laravel 的 CSV 导入验证不断验证值不存在