Re: 回复: flink sql count问题

2020-09-29 文章 Robin Zhang
Hi lemon,
不是很理解你的疑问是什么,flink是事件驱动的,所以,来一条数据,就会被处理,走你的逻辑,就会产生一个结果,如果是第一次出现的key,只有一条数据,如果是状态中已经存在的key,会在控制台输出两条数据,一条true的是最终sink的结果。所以,每次输出一条结果有什么问题吗?


Best,
Robin



lemon wrote
> 感谢各位的回答,各位的方法我都试了一下,但是都会在下游输出一条结果,一条不符合条件的语句count会在下游输出0
> 我理解是flink中的count对于每一条数据都会输出一条结果,所以只能把if中的判断条件再放到最后的where中进行过滤
> 类似于 selectcount(if(name like '南京%',1 , null)) where name
> like'南京%' or name like'杭州%' group by ** 这样
> 
> 
> --原始邮件--
> 发件人:  
>  
> "user-zh" 
>   
> <

> vincent2015qdlg@

> ;
> 发送时间:2020年9月29日(星期二) 下午5:32
> 收件人:"user-zh"<

> user-zh@.apache

> ;
> 
> 主题:Re: flink sql count问题
> 
> 
> 
> Hi lemon,
>  内部判断if函数可以替换为case when
> 
> Best,
> Robin
> 
> 
> lemon wrote
>  请教各位:
>  我有一个sql任务需要进行count,在count中有一个表达式,只想count符合条件的记录,
>  之前在hive中是这么写的:count(if(name like '南京%',1 , null)),但是flink
>  sql中count不能为null,有什么别的方法能实现该功能吗?
>  使用的是flink1.10.1 blink
>  nbsp;
> 
> 
> 
> 
> 
> --
> Sent from: http://apache-flink.147419.n8.nabble.com/





--
Sent from: http://apache-flink.147419.n8.nabble.com/


Re: 回复:flink sql count问题

2020-09-27 文章 Benchao Li
Hi,

试试用这种方式呢:count(1) filter (where name like '南京%')

anonnius  于2020年9月27日周日 下午5:29写道:

> select count(nullif(if(name not like '南京%', '其他', '南京'), '其他'))
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> 在 2020-09-27 17:23:07,"zya"  写道:
> >你好,链接无法显示,能麻烦再贴下吗
> >
> >
> >--原始邮件--
> >发件人:
>   "user-zh"
>                 <
> anonn...@126.com;
> >发送时间:2020年9月27日(星期天) 下午5:20
> >收件人:"user-zh" >
> >主题:Re:回复:flink sql count问题
> >
> >
> >
> >hi: '其他', '南京'), '其他'))
> >在 2020-09-27 17:07:39,"zya"  >貌似只能这样了,感谢回答
> >
> >
> >
> >
> >--nbsp;原始邮件nbsp;--
> >发件人:
> "user-zh"
>  >发送时间:nbsp;2020年9月27日(星期天) 下午5:03
> >收件人:nbsp;"user-zh" >
> >主题:nbsp;Re:回复:flink sql count问题
> >
> >
> >
> >你count 也会生成记录啊。 你过滤掉就行nbsp;nbsp; 。 比如 having xxxnbsp;
> ,或者加个filter
> >在 2020-09-27 17:01:06,"zya"  >gt;这个是我现在的做法,但是的问题就是使用sum会在条件没满足时也会在mysql中生成一条记录
> >gt;amp;nbsp;
> >gt;
> >gt;
> >gt;
> >gt;
>
> >gt;--amp;nbsp;原始邮件amp;nbsp;--
> >gt;发件人:nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
> "user-zh"nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
>  >gt;发送时间:amp;nbsp;2020年9月27日(星期天) 下午4:59
> >gt;收件人:amp;nbsp;"user-zh" amp;gt;;
> >gt;
> >gt;主题:amp;nbsp;Re:flink sql count问题
> >gt;
> >gt;
> >gt;
> >gt;最好把null 变成0,amp;nbsp; 你这样amp;nbsp;amp;nbsp;
> sum(if(name like '南京%',1 , 0))
> >gt;在 2020-09-27 16:53:56,"zya"  写道:
> >gt;amp;gt;请教各位:
> >gt;amp;gt;我有一个sql任务需要进行count,在count中有一个表达式,只想count符合条件的记录,
> >gt;amp;gt;之前在hive中是这么写的:count(if(name like '南京%',1 ,
> null)),但是flink sql中count不能为null,有什么别的方法能实现该功能吗?
> >gt;amp;gt;使用的是flink1.10.1 blink
> >gt;amp;gt;amp;amp;nbsp;
>


-- 

Best,
Benchao Li


Re:回复:flink sql count问题

2020-09-27 文章 anonnius
select count(nullif(if(name not like '南京%', '其他', '南京'), '其他'))

















在 2020-09-27 17:23:07,"zya"  写道:
>你好,链接无法显示,能麻烦再贴下吗
>
>
>--原始邮件--
>发件人:   
> "user-zh" 
>   
>发送时间:2020年9月27日(星期天) 下午5:20
>收件人:"user-zh"
>主题:Re:回复:flink sql count问题
>
>
>
>hi:'南京'), '其他'))
>在 2020-09-27 17:07:39,"zya" 貌似只能这样了,感谢回答
>
>
>
>
>--nbsp;原始邮件nbsp;--------------
>发件人:
> 
>"user-zh"
> 发送时间:nbsp;2020年9月27日(星期天) 下午5:03
>收件人:nbsp;"user-zh"
>主题:nbsp;Re:回复:flink sql count问题
>
>
>
>你count 也会生成记录啊。 你过滤掉就行nbsp;nbsp; 。 比如 having xxxnbsp; 
>,或者加个filter
>在 2020-09-27 17:01:06,"zya" gt;这个是我现在的做法,但是的问题就是使用sum会在条件没满足时也会在mysql中生成一条记录
>gt;amp;nbsp;
>gt;
>gt;
>gt;
>gt;
>gt;--amp;nbsp;原始邮件amp;nbsp;--
>gt;发件人:nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
> 
>"user-zh"nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
> gt;发送时间:amp;nbsp;2020年9月27日(星期天) 下午4:59
>gt;收件人:amp;nbsp;"user-zh"gt;
>gt;主题:amp;nbsp;Re:flink sql count问题
>gt;
>gt;
>gt;
>gt;最好把null 变成0,amp;nbsp; 你这样amp;nbsp;amp;nbsp; 
>sum(if(name like '南京%',1 , 0))
>gt;在 2020-09-27 16:53:56,"zya" gt;amp;gt;请教各位:
>gt;amp;gt;我有一个sql任务需要进行count,在count中有一个表达式,只想count符合条件的记录,
>gt;amp;gt;之前在hive中是这么写的:count(if(name like '南京%',1 , 
>null)),但是flink sql中count不能为null,有什么别的方法能实现该功能吗?
>gt;amp;gt;使用的是flink1.10.1 blink
>gt;amp;gt;amp;amp;nbsp;