GroupBy和OverWindow在flinksql中有什么不同?

8gsdolmq  于 2021-06-26  发布在  Flink
关注(0)|答案(1)|浏览(405)

人们可以用两种不同的方式使用flink中的窗口

SELECT key, MAX(value)
  FROM table
 GROUP BY key, TUMBLE(ts, INTERVAL '5' MINUTE)

SELECT key, MAX(value) OVER w
  FROM table
 WINDOW w AS (PARTITION BY key ORDER BY ts ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)

我想知道这两种机制是否可以表达相同的东西,或者两者的主要区别和可能的用例是什么?

ztigrdn8

ztigrdn81#

两个查询都计算与常规sql的语义相对应的不同结果。所以区别不是特定于flink的,而是由sql标准定义的。
第一个查询

SELECT key, MAX(value)
  FROM table
 GROUP BY key, TUMBLE(ts, INTERVAL '5' MINUTE)

按分组记录 key 还有5分钟的桶。查询每5分钟生成一行 key 最大值 value . 对于每个组,多行聚合为一行。
第二个查询

SELECT key, MAX(value) OVER w
  FROM table
 WINDOW w AS (PARTITION BY key ORDER BY ts ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)

为输入的每一行生成一行( table ). 结果行具有最大 value 对于 key 到目前为止观察到的值(行按 ts ). 注意,多行不是聚合到一行的;每个输入行产生一个输出行。此外,最大聚集范围可以超过5分钟。事实上,这是全部 key 本例中的分区。

相关问题