【发布时间】:2016-10-27 16:01:13
【问题描述】:
我有一些使用 MongoDB 的经验,并且正在学习 BigQuery。我正在尝试执行以下任务,但我不知道如何使用 BigQuery 的标准 SQL 来完成。
我有一张包含以下数据的表格。它包含在不同网站 url 上发生的事件。时间戳表示给定事件发生的时间。例如,第一行表示“事件 'xx' 在 2016 年 10 月 18 日 15:55:16 UTC 发生在 url 'a.html' 上。”
event_id | url | timestamp
-----------------------------------------------------------
xx a.html 2016-10-18 15:55:16 UTC
xx a.html 2016-10-19 16:68:55 UTC
xx a.html 2016-10-25 20:55:57 UTC
yy b.html 2016-10-18 15:58:09 UTC
yy a.html 2016-10-18 08:32:43 UTC
zz a.html 2016-10-20 04:44:22 UTC
zz c.html 2016-10-21 02:12:34 UTC
我想在滚动的 3 天窗口内计算每个网址上发生的每个事件的数量。换句话说,我希望能够说以下内容:
“在 url 'a.html' 上,在时间间隔 [2016-10-18 00:00:00 UTC,2016-10-21 00:00:00 UTC)期间,发生了事件 'xx'两次。”
“在 url 'a.html' 上,在时间间隔 [2016-10-19 00:00:00 UTC,2016-10-22 00:00:00 UTC)期间,发生了事件 'xx'一次。”
"在 url 'a.html' 上,在时间间隔 [2016-10-20 00:00:00 UTC,2016-10-23 00:00:00 UTC),事件 'xx' 发生零次。” (注意:这不需要作为一行返回。没有这一行可能意味着该事件发生了零次。)
一些注意事项:我的数据库每天包含超过 10 万行,并且事件的发生情况各不相同。这意味着,在 1 天内,事件“xx”将发生约 10,000 次,事件“zz”将发生约 0-2 次。
鉴于我有限的 SQL 知识,我不想为结果表提供结构,因为我认为这可能会错误地限制可能的答案。谢谢!
【问题讨论】:
-
查看stackoverflow.com/a/49866033/132438 以获取具有近似结果的更快解决方案 - 以防您还需要滚动计数唯一性。
标签: sql google-bigquery