【发布时间】:2013-02-05 14:48:10
【问题描述】:
我在 BigQuery 中有一个包含某种类型活动的表格,现在只有大约 40Mb 的数据。活动日期存储在其中一个字段中(格式为 YYYY-MM-DD HH:MM:SS 的字符串)。我需要找到方法来确定运行合理时间的不活动时间段(具有一些预定义的阈值)。
我构建的查询已经运行了一个小时。这里是:
SELECT t1.date, MIN(PARSE_UTC_USEC(t1.date) - PARSE_UTC_USEC(t2.date)) AS mintime
FROM logs t1
JOIN (SELECT date, http_error FROM logs) t2 ON t1.http_error = t2.http_error
WHERE PARSE_UTC_USEC(t1.date) > PARSE_UTC_USEC(t2.date)
GROUP BY t1.date
HAVING mintime > 1000;
想法是: 1. 将表与自身进行 decart 乘法(http_error 是几乎从不改变值的字段,所以它可以解决问题) 2. 只取 date1 > date2 的对 3. 以最小的差异取每个 date1 date2 4. 在最小差异超过阈值的情况下限制选择。
我承认我使用的真正查询是修复无效数据的负担(这增加了额外的操作)。但我真的需要更好的主意来做到这一点。我很高兴听到其他想法
【问题讨论】:
标签: sql join group-by google-bigquery having-clause