【发布时间】:2021-08-26 08:12:16
【问题描述】:
我有一个简单的表,其中包含时间列(1 分钟频率)和另一列浮点值,我们称之为 A 列。 我的目标是在 BigQuery 中创建一个执行以下操作的查询:
对于每一行,查看前 24 小时和后 24 小时的窗口,并获取作为窗口中心的特定行的相关“桶号”(如NTILE(5) func)。
我正在尝试实现“滚动分箱” - 类似于“滚动分位数”(如 pandas Rolling Quantile) 但带有箱号。我可以在 python 中非常简单地使用pd.DataFrame.rolling.apply 和用于分箱和返回值的自定义函数,但我想使用 BigQuery 来完成。
我在结合 NTILE 函数和滚动窗口时遇到问题。
我能够创建一个滚动窗口(在文档中称为Analytic function)并执行简单的聚合,例如使用平均值
SELECT Time, AVG(A)
OVER (ORDER BY UNIX_SECONDS(Time) ASC RANGE BETWEEN 86400 PRECEDING AND 86400 FOLLOWING) as rolling_avg_24_hours_each_side
FROM `my_project.my_table`
(86400 来自一小时内的 3600 秒 * 24 小时。有没有使用幻数的替代方法?)
在我的整个表格上使用NTILE(5) 函数很容易,但我不能在滚动窗口中使用它。
正如Numbering functions 的文档所述,不允许使用window_frame_clause,因此我不能将RANGE... 语句与NTILE 结合使用。
所以我的主要问题是如何将NTILE 函数与滚动窗口结合起来,或者是否有其他解决方案可以实现滚动窗口的“滚动分箱”?
【问题讨论】:
标签: sql google-bigquery