【发布时间】:2017-11-12 07:57:44
【问题描述】:
我想知道如何最好地在 BigQuery standardSQL(不是旧版)中同时实现翻转和滑动窗口。
Apache Spark 让这变得非常简单 - 对于长度为 10 分钟的“滑动”窗口,每 5 分钟滑动一次,groupBy(window("10 minutes","5 minutes)) 和滚动窗口 groupBy(window("10分钟”))。
考虑我有一个简化的订单行:
orderId,
orderPlacedTimestamp,
orderTotals.grandTotalNet,
orderTotals.grandTotalGross
(注意总数的结构)
我需要两个总订单销售价值:
- 每小时翻滚的销售窗口
- 滑动 10 MINUTE / 5 MINUTE 窗口(如上所述)。
我开始使用 SQL over,但在分区、时间戳和获取正确的开始和结束窗口方面有点混乱。对于每个结果集应该是:
windowStartTime,
windowEndTime,
windowTotalAmount
所以窗口有一个开始和结束时间(这对于滑动至关重要,因为窗口 10 的长度与滑动持续时间 5 不同,因此给定的行可以在多个窗口中)。
如何在 BigQuery 中执行此操作?
使用当前 SQL 更新 11/06:
SELECT
TIMESTAMP_SECONDS(FIRST_VALUE(ts_5min*5*60) OVER(w)) as startWindowTime,
TIMESTAMP_SECONDS(LAST_VALUE(ts_5min*5*60) OVER(w)) as endWindowTime,
SUM(orderTotalNetConverted) OVER(ORDER BY ts_5min RANGE BETWEEN 1 PRECEDING AND CURRENT ROW) as windowSalesTotal
FROM (
SELECT
CAST(UNIX_SECONDS(TIMESTAMP_TRUNC(orderPlacedTimestamp, MINUTE))/60/5 AS INT64)
AS ts_5min,
orderTotalNetConverted
FROM orders
)
WINDOW w AS (ORDER BY ts_5min RANGE BETWEEN 1 PRECEDING AND CURRENT ROW)
ORDER BY startWindowTime desc
【问题讨论】:
-
请编辑并添加您目前编写的 SQL
标签: google-bigquery