这是一个扩展的一个问题,我问,并解决在计算器上这里。
我是BigQuery和SQL的新手,我想构建一个标准SQL查询,该查询将在X天的滚动时间内对事件进行分组和计数。我的数据表如下所示:
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
我正在跟踪网址上发生的事件。我想知道在X天的滚动时间内,每个事件在每个URL上发生了多少次。当我问这个问题时,我得到了一个很好的答案:
WITH dailyAggregations AS (
SELECT
DATE(ts) AS day,
url,
event_id,
UNIX_SECONDS(TIMESTAMP(DATE(ts))) AS sec,
COUNT(1) AS events
FROM yourTable
GROUP BY day, url, event_id, sec
)
SELECT
url, event_id, day, events,
SUM(events)
OVER(PARTITION BY url, event_id ORDER BY sec
RANGE BETWEEN 259200 PRECEDING AND CURRENT ROW
) AS rolling4daysEvents
FROM dailyAggregations
259200是3天,以秒为单位(3x24x3600)。据我了解,该查询创建一个中间表,该表按天对事件进行分组和计数。它还将timestamp字段转换为其等效的unix秒。然后,它使用一个以秒为单位的窗口来总结事件。
现在,这将产生一个具有正确运行总计的表,但它不能保证每个日期,URL和事件都有一行。换句话说,如果存在某个事件从未在给定的URL上发生过的日期,则结果表中将缺少日期。底线是,我可以修改上面的查询(或构造一个不同的查询),以正确地为间隔中的每个日期生成rolling4daysEvents的值吗?例如:像一个间隔定义为:
SELECT *
FROM UNNEST (GENERATE_DATE_ARRAY('2016-08-28', '2016-11-06')) AS day
ORDER BY day ASC
谢谢!
WITH dailyAggregations AS (
SELECT
DATE(ts) AS day,
url,
event_id,
UNIX_SECONDS(TIMESTAMP(DATE(ts))) AS sec,
COUNT(1) AS events
FROM yourTable
GROUP BY day, url, event_id, sec
),
calendar AS (
SELECT day
FROM UNNEST (GENERATE_DATE_ARRAY('2016-08-28', '2016-11-06')) AS day
)
SELECT
c.day, url, event_id, events,
SUM(events)
OVER(PARTITION BY url, event_id ORDER BY sec
RANGE BETWEEN 259200 PRECEDING AND CURRENT ROW
) AS rolling4daysEvents
FROM calendar AS c
LEFT JOIN dailyAggregations AS a
ON a.day = c.day
问题内容: 我在MongoDB上有一些经验,并且正在学习BigQuery。我正在尝试执行以下任务,但我不知道如何使用BigQuery的标准SQL来执行此任务。 我有一张包含以下数据的表。它包含在不同网站URL上发生的事件。时间戳表示给定事件发生的时间。例如,第一行表示“事件’xx’发生在世界标准时间2016-10-18 15:55:16的URL’a.html’上。” 我想计算一个3天滚动窗口中每个
问题内容: 样本数据可能会有助于解释我想做的事情,而不是解释它,因此,我将从此开始。 这是我目前正在使用的数据: 我正在尝试在15分钟的时间内滚动显示此数据中的出现次数。该数据的预期结果如下: 样本数据: 我可以通过以下方式 使它 起作用: 但是,我想避免使用子查询,而建议使用(或其他任何可能的解决方案)解决方案。 这可能吗?还是子查询是正确的解决方案? 问题答案: 一种方法-如果表很大,可能比嵌
我尝试
有时候,能够知道一个计算执行消耗的时间是非常有意义的,尤其是在对比和基准测试中。最简单的一个办法就是在计算开始之前设置一个起始时候,再由计算结束时的结束时间,最后取出它们的差值,就是这个计算所消耗的时间。想要实现这样的做法,可以使用 time 包中的 Now() 和 Sub 函数: start := time.Now() longCalculation() end := time.Now() de
我必须制作一个程序来找到显示n的最大方式!数字(不包括1)。 比如:4!= 1x2x3x4 = 1x2x3x2x2。所以你可以用5个数的乘积来表示4!。所以输入是4,输出是5。5是你能表达4的最大数量!。 简单地说,就是将一个阶乘数分解为素因子,计算出它们的个数并显示出来。 我所做的是一个“for”循环,在这个循环中我计算1到“n”的所有素因子及其数量。 但我对大数字有一个问题,比如当“n”是10
问题内容: 有没有一种方法可以有效地为Numpy中的1D数组实现滚动窗口? 例如,我有这个纯Python代码段来计算一维列表的滚动标准偏差,其中一维值列表和标准偏差的窗口长度: 有没有办法在Numpy内完全做到这一点,即没有任何Python循环?标准偏差对于而言是微不足道的,但是滚动窗口部分完全使我难过。 我发现这个关于numpy的滚动窗口博客文章,但似乎并没有为一维数组。 问题答案: 只需使用博