flink sql groupBy 使用注意

1、flink sql groupBy异常疑惑

在flink sql的任务开发中,会大量使用groupBy聚合数据,但是下一些场景回发现使用groupBy会报错,我自己在刚开发flink sql任务不久,发现这个问题同样的写法,有的地方成功有的地方失败,有一段时间感觉很疑惑。

下面是使用 sink kafka的报错信息

sql parser error: AppendStreamTableSink doesn't support consuming update changes which is 

produced by node GroupAggregate(groupBy=[log_map], select=[log_map])

从报错信息来看,是因为sink kakfa不支持持续更新,什么意思呢?

groupBy算子操作输出的数据,要覆盖上一次的数据,但是kafka本身的特性是不支持更新的,所以在sink数据的时候我们要注意数据存储容器的特性。判断是否可以使用groupBy,通过判断存储数据的容器是否支持数据更新,一支持数据更新的数据库,比如mysql、es、clickhouse,我们就可以使用groupBy, 对应的filnk-connector,有update sink,生产更新语句。

2、窗口聚合

虽然sink-kafka不支持持续更新,如果我们有业务场景需求,可以做局部的聚合也就是窗口聚合,在窗口内的数据聚合输出一次结果,这样就可以把部分聚合数据写入到kafka。

INSERT INTO kafka_sink_table
SELECT
	COUNT(1) cnt
FROM kafka_source_table
GROUP BY TUMBLE(proctime(), INTERVAL '10' second)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值