Sql 如何在BigQuery中查找没有活动的期间

Sql 如何在BigQuery中查找没有活动的期间,sql,join,group-by,google-bigquery,having-clause,Sql,Join,Group By,Google Bigquery,Having Clause,我在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,

我在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.每个日期1和日期2的差异最小 4.通过最小差异超过阈值的情况限制选择


我承认,我使用的真正查询由于对无效数据的修复而有点负担(这会增加额外的操作)。但我真的需要更好的主意来做这件事。我很高兴听到其他想法

我不知道您所寻找的不活动的粒度,但为什么不尝试按时间戳进行分类,然后计算每个桶中活动的相对频率:

SELECT
  UTC_USEC_TO_HOUR(PARSE_UTC_USEC(timestamp_usec)) AS hour_bucket,
  COUNT(*) as activity_count
GROUP BY
  hour_bucket
ORDER BY
  activity_count ASC;

是的,这和我最后做的差不多。非常感谢。