在 Presto 中为多个功能重复相同的窗口?
Posted
技术标签:
【中文标题】在 Presto 中为多个功能重复相同的窗口?【英文标题】:Repeating the same window for several functions in Presto? 【发布时间】:2021-10-22 05:04:20 【问题描述】:我正在运行类似于以下内容的查询,以累积截至日期的 7 天窗口中正值数量和事件总数的总和。
SELECT
first_value(date) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS date_left,
last_value(date) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS date_right,
sum(positives) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS events,
sum(events) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS total
FROM
data
虽然这个查询有效,但它并不漂亮,因为它重复了相同的长窗口规范 4 次。
有没有办法在 Presto 中“保存”一个窗口,或者在同一个窗口上使用多个功能?
【问题讨论】:
大多数数据库都支持FROM
子句中的标准WINDOW
定义。但是,根据文档,Presto 似乎不支持这一点:prestodb.io/docs/current/sql/select.html。
也只是供参考 Trino(PrestoSQL 的更名版本)supprotsWINDOW 定义。
【参考方案1】:
为了呼应@Gordon Linoff 和@Guru Stron 在 cmets 中所说的话,PrestoDB 确实支持窗口函数,但不支持 WINDOW
子句。然而,今年早些时候,Trino (formerly PrestoSQL) 拥有 support for WINDOW
和 Trino recently added more features。如:
RANGE
帧类型。
支持GROUPS
帧类型。
对WINDOW
子句的更多支持。
如果您的团队需要这些类型的功能,我建议您升级到 Trino。
【讨论】:
以上是关于在 Presto 中为多个功能重复相同的窗口?的主要内容,如果未能解决你的问题,请参考以下文章
等效于 hive 中 Presto 的 transform() 函数