我在窗口外面又包了一层,但是这样写是不行的,大概逻辑是图片中这样。FlinkSQL怎么在一个窗口中进行两次聚合呢,麻烦大家帮忙看看呢
在 Flink SQL 中,要在窗口中进行两次聚合,可以使用嵌套的窗口函数。在您的例子中,您已经使用了 TUMBLE
函数来创建一个窗口,并对窗口内的数据进行了第一次聚合。要进行第二次聚合,您可以使用另一个窗口函数(如 TUMBLE
或 SESSION
),并在其内部引用之前窗口的结果。
以下是一个示例,演示如何在一个窗口内进行两次聚合:
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
函数,并将内部查询的窗口结果作为输入。外部查询会根据新的窗口和 no
、bei
分组,并计算每个新窗口内 window_avg
的平均值。
您需要根据实际需求调整时间字段和窗口大小。此外,确保外部窗口函数使用的 time_ltz
字段与内部窗口函数相同,以便正确地引用原始数据的时间戳。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。