You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by Jimmy Wong <wa...@163.com> on 2019/12/11 03:19:45 UTC

回复: 窗口去重

Hi, Yuan,Youjun 谢谢。 你这种方案是 SQL 的角度吧,如果用 DataStream 算子要怎么处理呢?


| |
Jimmy Wong
|
|
wangzmking@163.com
|
签名由网易邮箱大师定制


在2019年12月11日 09:04,Yuan,Youjun<yu...@baidu.com> 写道:
第一种情况,用firstvalue这种聚合函数; 第二种情况,用min聚合函数,然后group by id,是不是就是你要的结果?

-----邮件原件-----
发件人: Jimmy Wong <wa...@163.com>
发送时间: Tuesday, December 10, 2019 4:40 PM
收件人: user-zh@flink.apache.org
主题: 窗口去重

Hi,All:
请教一个问题,现在有个实时场景:需要对每 5 分钟内数据进行去重,然后 Sink。
比如:
数据
{ts: 2019-12-10 16:24:00 id: 1}
{ts: 2019-12-10 16:22:00 id: 1}
{ts: 2019-12-10 16:23:00 id: 2}
{ts: 2019-12-10 16:21:00 id: 1}
{ts: 2019-12-10 16:29:00 id: 2}
{ts: 2019-12-10 16:27:00 id: 3}
{ts: 2019-12-10 16:26:00 id: 2}


第一种情景,不考虑时间去重,结果如下:
{ts: 2019-12-10 16:24:00 id: 1}
{ts: 2019-12-10 16:23:00 id: 2}
{ts: 2019-12-10 16:29:00 id: 2}
{ts: 2019-12-10 16:27:00 id: 3}


第二种情景,考虑时间去重,结果如下:
{ts: 2019-12-10 16:21:00 id: 1}
{ts: 2019-12-10 16:23:00 id: 2}
{ts: 2019-12-10 16:26:00 id: 2}
{ts: 2019-12-10 16:27:00 id: 3}


请教下,对于上面两种情景,分别有什么高效实时的解决方案么, 谢谢?我想了一下用 5min 窗口,和 ProcessWindowFunction 可以解决,但是 ProcessWindowFunction 要缓存 5min 的窗口数据,但是有延迟。




| |
Jimmy Wong
|
|
wangzmking@163.com
|
签名由网易邮箱大师定制


回复:窗口去重

Posted by Jimmy Wong <wa...@163.com>.
谢谢大家,我想到了解决方案:
情景一:可以每来一条数据就Trigger一次计算,然后再Window计算完的时候,清除状态
情景二:确实要等窗口计算完


| |
Jimmy Wong
|
|
wangzmking@163.com
|
签名由网易邮箱大师定制


在2019年12月11日 16:26,yanggang_it_job<ya...@163.com> 写道:
我觉得可以这样处理:<br/>1:首先把你的stream流注册为表(不管是一个还是多个stream)<br/>2:然后对这个表使用FLINKSQL进行业务表达<br/>3:最后使用FLINK SQL提供的开窗函数指定想要去重的字段<br/>注意:控制state的大小<br/>参考文档:https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/sql.html#deduplication
在 2019-12-11 15:53:00,"Jimmy Wong" <wa...@163.com> 写道:
属于不同的window,是window内去重,window间不去重


| |
Jimmy Wong
|
|
wangzmking@163.com
|
签名由网易邮箱大师定制


在2019年12月11日 12:08,梁溪<lx...@163.com> 写道:
去重了为什么还会有两个2




| |
梁溪
|
|
邮箱:lx_lance@163.com
|

签名由 网易邮箱大师 定制

在2019年12月11日 11:19,Jimmy Wong 写道:
Hi, Yuan,Youjun 谢谢。 你这种方案是 SQL 的角度吧,如果用 DataStream 算子要怎么处理呢?


| |
Jimmy Wong
|
|
wangzmking@163.com
|
签名由网易邮箱大师定制


在2019年12月11日 09:04,Yuan,Youjun<yu...@baidu.com> 写道:
第一种情况,用firstvalue这种聚合函数; 第二种情况,用min聚合函数,然后group by id,是不是就是你要的结果?

-----邮件原件-----
发件人: Jimmy Wong <wa...@163.com>
发送时间: Tuesday, December 10, 2019 4:40 PM
收件人: user-zh@flink.apache.org
主题: 窗口去重

Hi,All:
请教一个问题,现在有个实时场景:需要对每 5 分钟内数据进行去重,然后 Sink。
比如:
数据
{ts: 2019-12-10 16:24:00 id: 1}
{ts: 2019-12-10 16:22:00 id: 1}
{ts: 2019-12-10 16:23:00 id: 2}
{ts: 2019-12-10 16:21:00 id: 1}
{ts: 2019-12-10 16:29:00 id: 2}
{ts: 2019-12-10 16:27:00 id: 3}
{ts: 2019-12-10 16:26:00 id: 2}


第一种情景,不考虑时间去重,结果如下:
{ts: 2019-12-10 16:24:00 id: 1}
{ts: 2019-12-10 16:23:00 id: 2}
{ts: 2019-12-10 16:29:00 id: 2}
{ts: 2019-12-10 16:27:00 id: 3}


第二种情景,考虑时间去重,结果如下:
{ts: 2019-12-10 16:21:00 id: 1}
{ts: 2019-12-10 16:23:00 id: 2}
{ts: 2019-12-10 16:26:00 id: 2}
{ts: 2019-12-10 16:27:00 id: 3}


请教下,对于上面两种情景,分别有什么高效实时的解决方案么, 谢谢?我想了一下用 5min 窗口,和 ProcessWindowFunction 可以解决,但是 ProcessWindowFunction 要缓存 5min 的窗口数据,但是有延迟。




| |
Jimmy Wong
|
|
wangzmking@163.com
|
签名由网易邮箱大师定制


Re:回复:窗口去重

Posted by yanggang_it_job <ya...@163.com>.
我觉得可以这样处理:<br/>1:首先把你的stream流注册为表(不管是一个还是多个stream)<br/>2:然后对这个表使用FLINKSQL进行业务表达<br/>3:最后使用FLINK SQL提供的开窗函数指定想要去重的字段<br/>注意:控制state的大小<br/>参考文档:https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/sql.html#deduplication
在 2019-12-11 15:53:00,"Jimmy Wong" <wa...@163.com> 写道:
>属于不同的window,是window内去重,window间不去重
>
>
>| |
>Jimmy Wong
>|
>|
>wangzmking@163.com
>|
>签名由网易邮箱大师定制
>
>
>在2019年12月11日 12:08,梁溪<lx...@163.com> 写道:
>去重了为什么还会有两个2
>
>
>
>
>| |
>梁溪
>|
>|
>邮箱:lx_lance@163.com
>|
>
>签名由 网易邮箱大师 定制
>
>在2019年12月11日 11:19,Jimmy Wong 写道:
>Hi, Yuan,Youjun 谢谢。 你这种方案是 SQL 的角度吧,如果用 DataStream 算子要怎么处理呢?
>
>
>| |
>Jimmy Wong
>|
>|
>wangzmking@163.com
>|
>签名由网易邮箱大师定制
>
>
>在2019年12月11日 09:04,Yuan,Youjun<yu...@baidu.com> 写道:
>第一种情况,用firstvalue这种聚合函数; 第二种情况,用min聚合函数,然后group by id,是不是就是你要的结果?
>
>-----邮件原件-----
>发件人: Jimmy Wong <wa...@163.com>
>发送时间: Tuesday, December 10, 2019 4:40 PM
>收件人: user-zh@flink.apache.org
>主题: 窗口去重
>
>Hi,All:
>请教一个问题,现在有个实时场景:需要对每 5 分钟内数据进行去重,然后 Sink。
>比如:
>数据
>{ts: 2019-12-10 16:24:00 id: 1}
>{ts: 2019-12-10 16:22:00 id: 1}
>{ts: 2019-12-10 16:23:00 id: 2}
>{ts: 2019-12-10 16:21:00 id: 1}
>{ts: 2019-12-10 16:29:00 id: 2}
>{ts: 2019-12-10 16:27:00 id: 3}
>{ts: 2019-12-10 16:26:00 id: 2}
>
>
>第一种情景,不考虑时间去重,结果如下:
>{ts: 2019-12-10 16:24:00 id: 1}
>{ts: 2019-12-10 16:23:00 id: 2}
>{ts: 2019-12-10 16:29:00 id: 2}
>{ts: 2019-12-10 16:27:00 id: 3}
>
>
>第二种情景,考虑时间去重,结果如下:
>{ts: 2019-12-10 16:21:00 id: 1}
>{ts: 2019-12-10 16:23:00 id: 2}
>{ts: 2019-12-10 16:26:00 id: 2}
>{ts: 2019-12-10 16:27:00 id: 3}
>
>
>请教下,对于上面两种情景,分别有什么高效实时的解决方案么, 谢谢?我想了一下用 5min 窗口,和 ProcessWindowFunction 可以解决,但是 ProcessWindowFunction 要缓存 5min 的窗口数据,但是有延迟。
>
>
>
>
>| |
>Jimmy Wong
>|
>|
>wangzmking@163.com
>|
>签名由网易邮箱大师定制
>

回复:窗口去重

Posted by Jimmy Wong <wa...@163.com>.
属于不同的window,是window内去重,window间不去重


| |
Jimmy Wong
|
|
wangzmking@163.com
|
签名由网易邮箱大师定制


在2019年12月11日 12:08,梁溪<lx...@163.com> 写道:
去重了为什么还会有两个2




| |
梁溪
|
|
邮箱:lx_lance@163.com
|

签名由 网易邮箱大师 定制

在2019年12月11日 11:19,Jimmy Wong 写道:
Hi, Yuan,Youjun 谢谢。 你这种方案是 SQL 的角度吧,如果用 DataStream 算子要怎么处理呢?


| |
Jimmy Wong
|
|
wangzmking@163.com
|
签名由网易邮箱大师定制


在2019年12月11日 09:04,Yuan,Youjun<yu...@baidu.com> 写道:
第一种情况,用firstvalue这种聚合函数; 第二种情况,用min聚合函数,然后group by id,是不是就是你要的结果?

-----邮件原件-----
发件人: Jimmy Wong <wa...@163.com>
发送时间: Tuesday, December 10, 2019 4:40 PM
收件人: user-zh@flink.apache.org
主题: 窗口去重

Hi,All:
请教一个问题,现在有个实时场景:需要对每 5 分钟内数据进行去重,然后 Sink。
比如:
数据
{ts: 2019-12-10 16:24:00 id: 1}
{ts: 2019-12-10 16:22:00 id: 1}
{ts: 2019-12-10 16:23:00 id: 2}
{ts: 2019-12-10 16:21:00 id: 1}
{ts: 2019-12-10 16:29:00 id: 2}
{ts: 2019-12-10 16:27:00 id: 3}
{ts: 2019-12-10 16:26:00 id: 2}


第一种情景,不考虑时间去重,结果如下:
{ts: 2019-12-10 16:24:00 id: 1}
{ts: 2019-12-10 16:23:00 id: 2}
{ts: 2019-12-10 16:29:00 id: 2}
{ts: 2019-12-10 16:27:00 id: 3}


第二种情景,考虑时间去重,结果如下:
{ts: 2019-12-10 16:21:00 id: 1}
{ts: 2019-12-10 16:23:00 id: 2}
{ts: 2019-12-10 16:26:00 id: 2}
{ts: 2019-12-10 16:27:00 id: 3}


请教下,对于上面两种情景,分别有什么高效实时的解决方案么, 谢谢?我想了一下用 5min 窗口,和 ProcessWindowFunction 可以解决,但是 ProcessWindowFunction 要缓存 5min 的窗口数据,但是有延迟。




| |
Jimmy Wong
|
|
wangzmking@163.com
|
签名由网易邮箱大师定制


回复:窗口去重

Posted by 梁溪 <lx...@163.com>.
去重了为什么还会有两个2




| |
梁溪
|
|
邮箱:lx_lance@163.com
|

签名由 网易邮箱大师 定制

在2019年12月11日 11:19,Jimmy Wong 写道:
Hi, Yuan,Youjun 谢谢。 你这种方案是 SQL 的角度吧,如果用 DataStream 算子要怎么处理呢?


| |
Jimmy Wong
|
|
wangzmking@163.com
|
签名由网易邮箱大师定制


在2019年12月11日 09:04,Yuan,Youjun<yu...@baidu.com> 写道:
第一种情况,用firstvalue这种聚合函数; 第二种情况,用min聚合函数,然后group by id,是不是就是你要的结果?

-----邮件原件-----
发件人: Jimmy Wong <wa...@163.com>
发送时间: Tuesday, December 10, 2019 4:40 PM
收件人: user-zh@flink.apache.org
主题: 窗口去重

Hi,All:
请教一个问题,现在有个实时场景:需要对每 5 分钟内数据进行去重,然后 Sink。
比如:
数据
{ts: 2019-12-10 16:24:00 id: 1}
{ts: 2019-12-10 16:22:00 id: 1}
{ts: 2019-12-10 16:23:00 id: 2}
{ts: 2019-12-10 16:21:00 id: 1}
{ts: 2019-12-10 16:29:00 id: 2}
{ts: 2019-12-10 16:27:00 id: 3}
{ts: 2019-12-10 16:26:00 id: 2}


第一种情景,不考虑时间去重,结果如下:
{ts: 2019-12-10 16:24:00 id: 1}
{ts: 2019-12-10 16:23:00 id: 2}
{ts: 2019-12-10 16:29:00 id: 2}
{ts: 2019-12-10 16:27:00 id: 3}


第二种情景,考虑时间去重,结果如下:
{ts: 2019-12-10 16:21:00 id: 1}
{ts: 2019-12-10 16:23:00 id: 2}
{ts: 2019-12-10 16:26:00 id: 2}
{ts: 2019-12-10 16:27:00 id: 3}


请教下,对于上面两种情景,分别有什么高效实时的解决方案么, 谢谢?我想了一下用 5min 窗口,和 ProcessWindowFunction 可以解决,但是 ProcessWindowFunction 要缓存 5min 的窗口数据,但是有延迟。




| |
Jimmy Wong
|
|
wangzmking@163.com
|
签名由网易邮箱大师定制