flinksql-选择最后一个

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

我想发出一个时间窗口的最后一条记录。这很容易做到 maxBy 在常规的flink中,但我无法通过sqlapi让它工作。我想要的是:

SELECT LAST(attribute) FROM [table]
  GROUP BY key, TUMBLE(ts, INTERVAL '1' DAY)

其行为类似于

ds.keyBy(key)
  .window(TumblingEventTimeWindows.of(Time.days(1)))
  .maxBy(x -> x.getTs())

有什么方法可以在sqlapi中实现这一点吗?

vu8f3i0k

vu8f3i0k1#

我认为flink中还没有一个内置函数,但是您可以为此实现一个用户定义的聚合函数。
您需要稍微调整一下查询,并在聚合函数中传递timestamp字段,因为sql不会假定查询的行的顺序 GROUP BY 集团:

SELECT last_by(attribute, ts) FROM [table]
  GROUP BY key, TUMBLE(ts, INTERVAL '1' DAY)

有关如何实现和注册用户定义的聚合函数的详细信息,请参阅文档。

相关问题