我在 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。在此最小差异大于阈值的情况下限制选择。
我承认我使用的真正查询是修复无效数据的负担(这增加了额外的操作)。但我真的需要更好的主意来做到这一点。我很高兴听到其他想法