如何计算Google BigQuery的移动总和/平均值?

fer*_*sjp 1 google-bigquery

很难分析波动性太大的数据系列趋势。在许多情况下,使用平滑技术(例如移动平均值或移动总和)很有用。有很多工具可以执行此类操作,但是当我们谈论数百万行时,直接在诸如Google Big Query之类的云环境中进行操作很有用。

我的问题是:如何在Google Big Query上计算移动总和/平均?

下面是我想要达到的移动平均线的数字: 在此处输入图片说明

Mik*_*ant 7

以下是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