很难分析波动性太大的数据系列趋势。在许多情况下,使用平滑技术(例如移动平均值或移动总和)很有用。有很多工具可以执行此类操作,但是当我们谈论数百万行时,直接在诸如Google Big Query之类的云环境中进行操作很有用。
我的问题是:如何在Google Big Query上计算移动总和/平均?
以下是BigQuery标准SQL
#standardSQL
SELECT
pickup_date,
number_of_trip,
AVG(number_of_trip) OVER (ORDER BY day RANGE BETWEEN 6 PRECEDING AND CURRENT ROW) AS mov_avg_7d,
AVG(number_of_trip) OVER (ORDER BY day RANGE BETWEEN 27 PRECEDING AND CURRENT ROW) AS mov_avg_28d
FROM (
SELECT
DATE(pickup_datetime) AS pickup_date,
UNIX_DATE(DATE(pickup_datetime)) AS day,
COUNT(*) AS number_of_trip
FROM `nyc-tlc.yellow.trips`
GROUP BY 1, 2
)
WHERE pickup_date>'2013-01-01'
Run Code Online (Sandbox Code Playgroud)
乍一看-该答案与OP的答案非常相似,因此,关于此答案有何不同之处的评论很少:
首先(也是最不重要的)-BigQuery标准SQL是BigQuery团队强烈建议使用的-除非确实有充分的理由使用Legacy SQL-例如,由于范围快照或特定于遗留sql的原因
其次,最重要的是-在这种情况下对ROW使用OVER并不是最佳选择,因为它计算行而不是天,因此,如果-偶然地-错过了给定的任何天-计算将分别使用过去8天和29天(而不是7和28),
在这种情况下,应使用OVER和RANGE
| 归档时间: |
|
| 查看次数: |
2303 次 |
| 最近记录: |