flink-user-zh mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ren Xie <xiere...@gmail.com>
Subject Re: 求助帖: 流join场景可能出现的重复计算
Date Tue, 14 Jan 2020 10:19:55 GMT
实际场景还是有点复杂的, 便于理解 我简化成这样的,  简化后的这个,
没有实际的代码, 抱歉

大致 写一下 也就是这样了
```sql
select sum(score)
from
    student t1 inner join score t2 on t1.student_id = t2.std_id
where
    t1.student_id = 11
```
然后

```Java
String sql = ↑;
Table t = tEnv.sqlQuery(sql);
DataStream<Integer> stream1 = tEnv.toAppendStream(t, Integer.class);
stream1.keyBy("xxxx").sum("xxxx");
```

这样的一个sql, 在student表插入一个数据, score表插入2个数据后, 会执行一次计算出一个结果97
+ 98

update 学生表的name后, 一个新事件进入student的流, 还会触发一次计算,
得到97 + 98

因为可能有新的成绩插入, 所以对 stream1进行sum操作, 导致 97和98 都被重复计算了一次


Caizhi Weng <tsreaper96@gmail.com> 于2020年1月14日周二 下午5:49写道:

> Hi,
>
> 有可能的话,是否方便提供一下代码呢?
>
> Ren Xie <xieren12@gmail.com> 于2020年1月14日周二 下午5:38写道:
>
> > 学生
> > 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的一个),
分数流中有2个事件, 计算的总分数就会是 2 * (97 +
> > 98) = 390
> >
> > Q: 请问这种场景下使用什么能够解决, 计算出正确的结果 97 +
98 = 193
> >
> > 接触flink不久, 不是太了解, 请大佬给个提示, 谢谢!!
> >
>
Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message