开发者社区 > 大数据与机器学习 > 正文

FlinkSQL,我开窗后进行了一次聚合,但是我还想再在这个基础上再聚合一次,怎么操作呢

微信截图_20240227101046.png
我在窗口外面又包了一层,但是这样写是不行的,大概逻辑是图片中这样。FlinkSQL怎么在一个窗口中进行两次聚合呢,麻烦大家帮忙看看呢

展开
收起
远在咫尺丶 2024-02-27 10:16:52 53 0
1 条回答
写回答
取消 提交回答
  • 在 Flink SQL 中,要在窗口中进行两次聚合,可以使用嵌套的窗口函数。在您的例子中,您已经使用了 TUMBLE 函数来创建一个窗口,并对窗口内的数据进行了第一次聚合。要进行第二次聚合,您可以使用另一个窗口函数(如 TUMBLESESSION),并在其内部引用之前窗口的结果。

    以下是一个示例,演示如何在一个窗口内进行两次聚合:

    SELECT
        window_start,
        no,
        bei,
        SUM(dl_a) AS dl_a,
        AVG(window_avg) AS avg_dl_a
    FROM (
        SELECT
            TUMBLE_START(time_ltz, INTERVAL '15' MINUTES) AS window_start,
            no,
            bei,
            SUM(dl_a) AS dl_a,
            AVG(dl_a) AS window_avg
        FROM TABLE
        GROUP BY TUMBLE(time_ltz, INTERVAL '15' MINUTES), no, bei
    ) AS t1
    GROUP BY TUMBLE(time_ltz, INTERVAL '15' MINUTES), no, bei
    

    在这个示例中,我们首先使用 TUMBLE 函数创建了一个窗口,并计算了每个窗口内的 dl_a 总和以及平均值。然后,我们在外部查询中再次使用 TUMBLE 函数,并将内部查询的窗口结果作为输入。外部查询会根据新的窗口和 nobei 分组,并计算每个新窗口内 window_avg 的平均值。

    您需要根据实际需求调整时间字段和窗口大小。此外,确保外部窗口函数使用的 time_ltz 字段与内部窗口函数相同,以便正确地引用原始数据的时间戳。

    2024-02-27 14:08:03
    赞同 展开评论 打赏

大数据领域前沿技术分享与交流,这里不止有技术干货、学习心得、企业实践、社区活动,还有未来。

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载