在 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() 函数

多个过剩窗口,但显示功能相同

需要在 javascript 中为选项卡窗口和 Internet Explorer 中的新窗口提供唯一 ID [重复]

PostgreSQL 如何查找并删除重复数据

PostgreSQL 如何查找并删除重复数据

PostgreSQL 如何查找并删除重复数据