gt; Best,
> Jingsong Lee
>
>
> --
> From:Caizhi Weng
> Send Time:2020年1月15日(星期三) 11:53
> To:user-zh
> Subject:Re: 求助帖: 流join场景可能出现的重复计算
>
> Hi,
>
> Flink 目前认为所有的 source 都是 append only 的,retract、upsert 等都是内部处理时的概念,对用户是不可见的。
>
> 所以目前你只能先通过 group by 和 last_va
学生
student_id name
11 foo
学科分数
id name score std_id
100 math 97 11
101 english 98 11
有如下一个场景(假设只有一个学生)
基于binlog检测这2个表的变化, 计算这个学生的总分数, 使用了Table/SQL API join操作计算
假设insert以上数据后到达某时刻, 以上数据都进入了flink, 计算出这个学生总分数 97 + 98 = 195
但此时发现学生姓名登记错误, 于是进行了修改,
结果此时Flink中学生流中有2个事件(insert的一个+update的一个),
, Integer.class);
stream1.keyBy("").sum("");
```
这样的一个sql, 在student表插入一个数据, score表插入2个数据后, 会执行一次计算出一个结果97 + 98
update 学生表的name后, 一个新事件进入student的流, 还会触发一次计算, 得到97 + 98
因为可能有新的成绩插入, 所以对 stream1进行sum操作, 导致 97和98 都被重复计算了一次
Caizhi Weng 于2020年1月14日周二 下午5:49写道:
> Hi,
>
&g
udent join 2个分数)
5步计算出196(390 + 新分数 join 2个student, 其实是 390 - 97 -97)
6步骤计算出390(196 + 新分数 join 2个student)
在第4步的时候, 分数就不太对了, 因为流中同一个student对应了2个事件
xin Destiny 于2020年1月14日周二 下午6:39写道:
> Hi,
> 如果说插入两条update操作呢,一次分数是-97,一次是97
>
>
>
>
> Ren Xie 于2020年1月14日周二 下午6:20写道:
>
&
的消息
> 3,基于时间窗口的聚合,对于student表的数据,每n秒输出一个唯一的student_id,然后再与score流join。
>
> -邮件原件-
> 发件人: xin Destiny
> 发送时间: Tuesday, January 14, 2020 6:39 PM
> 收件人: user-zh@flink.apache.org
> 主题: Re: 求助帖: 流join场景可能出现的重复计算
>
> Hi,
> 如果说插入两条update操作呢,一次分数是-97,一次是97
>
>
>