Re:Re: 咨询个Flink SQL的问题,如何去除null的字段
Hi, 感谢回复,我也测试过这类方法, 我给json format加了个参数,在序列化的时候,row里面去除null,但是这个要修改代码,单独更新flink-json的jar包了,后期维护可能会有问题 这种很适合写ES和写文件,不会有冗余的字段 如果社区能新增这个功能或者合并进去就方便了 在 2022-01-06 21:18:37,"Benchao Li" 写道: >我们内部是给json format加了一个功能,允许不把null字段进行序列化。主要解决的也是es这个写入的场景。 >你们也可以试一下。 > >RS 于2021年12月29日周三 16:41写道: > >> Hi, >> 使用Flink SQL消费Kafka写ES,有时候有的字段不存在,不存在的不想写入ES,这种情况怎么处理呢? >> >> >> 比如:源数据有3个字段,a,b,c >> insert into table2 >> select >> a,b,c >> from table1 >> 当b=null的时候,只希望写入a和c >> 当c=null的时候,只希望写入a和b >> >> > >-- > >Best, >Benchao Li
Re: Re: Re:咨询个Flink SQL的问题,如何去除null的字段
Hi! 感谢说明。目前 elastic search sink 确实没有这样的功能。一种方式是如其他回复所说对 SQL 进行判断,不过我觉得更好的方式是写一个自定义的 es sink。es sink 的逻辑详见 ElasticsearchDynamicSink 类,可能只需要实现一个自定义的 RowElasticsearchEmitter 就可以了。 RS 于2021年12月31日周五 10:29写道: > Hi, > 你好,是这样的,从kafka消费的话,如果表定义了 a,b,c三个字段,如果kafka的数据少了一个a,那么在flink sql里面,读出来的就是 > a=null,写入ES的话,就会有个a=null > > > 比如从ES查询数据的话 > 期望 没有a的时候,查询结果类似 {b=1,c=2} > 如果写了a=null进去,查询结果类似 {a=null,b=1,c=2} > 这样结果就和期望的不一样了,所以期望是Flink SQL insert的时候 ,不写数值为null字段 > > 在 2021-12-31 10:15:41,"Caizhi Weng" 写道: > >Hi! > > > >我不太熟悉 es,如果某一个字段不写的话,是会写入一个默认值吗?如果是的话,可以使用 coalesce 函数。coalesce(a, b, c, > >...) 会返回第一个非 null 的值,因此只要把默认值放在最后一个,如果前面都是 null 就会写默认值。 > > > >RS 于2021年12月30日周四 17:06写道: > > > >> 有10~20个字段,这样一个个写,手都敲断了,还有其他的方式吗?或者如何开发代码适配到SQL? > >> > >> > >> > >> > >> > >> 在 2021-12-30 11:36:21,"Xuyang" 写道: > >> >可以使用case when试一下 > >> >在 2021-12-29 16:40:39,"RS" 写道: > >> >>Hi, > >> >>使用Flink SQL消费Kafka写ES,有时候有的字段不存在,不存在的不想写入ES,这种情况怎么处理呢? > >> >> > >> >> > >> >>比如:源数据有3个字段,a,b,c > >> >>insert into table2 > >> >>select > >> >>a,b,c > >> >>from table1 > >> >>当b=null的时候,只希望写入a和c > >> >>当c=null的时候,只希望写入a和b > >> >> > >> >
Re:Re: Re:咨询个Flink SQL的问题,如何去除null的字段
Hi, 你好,是这样的,从kafka消费的话,如果表定义了 a,b,c三个字段,如果kafka的数据少了一个a,那么在flink sql里面,读出来的就是 a=null,写入ES的话,就会有个a=null 比如从ES查询数据的话 期望 没有a的时候,查询结果类似 {b=1,c=2} 如果写了a=null进去,查询结果类似 {a=null,b=1,c=2} 这样结果就和期望的不一样了,所以期望是Flink SQL insert的时候 ,不写数值为null字段 在 2021-12-31 10:15:41,"Caizhi Weng" 写道: >Hi! > >我不太熟悉 es,如果某一个字段不写的话,是会写入一个默认值吗?如果是的话,可以使用 coalesce 函数。coalesce(a, b, c, >...) 会返回第一个非 null 的值,因此只要把默认值放在最后一个,如果前面都是 null 就会写默认值。 > >RS 于2021年12月30日周四 17:06写道: > >> 有10~20个字段,这样一个个写,手都敲断了,还有其他的方式吗?或者如何开发代码适配到SQL? >> >> >> >> >> >> 在 2021-12-30 11:36:21,"Xuyang" 写道: >> >可以使用case when试一下 >> >在 2021-12-29 16:40:39,"RS" 写道: >> >>Hi, >> >>使用Flink SQL消费Kafka写ES,有时候有的字段不存在,不存在的不想写入ES,这种情况怎么处理呢? >> >> >> >> >> >>比如:源数据有3个字段,a,b,c >> >>insert into table2 >> >>select >> >>a,b,c >> >>from table1 >> >>当b=null的时候,只希望写入a和c >> >>当c=null的时候,只希望写入a和b >> >> >>
Re: Re:咨询个Flink SQL的问题,如何去除null的字段
Hi! 我不太熟悉 es,如果某一个字段不写的话,是会写入一个默认值吗?如果是的话,可以使用 coalesce 函数。coalesce(a, b, c, ...) 会返回第一个非 null 的值,因此只要把默认值放在最后一个,如果前面都是 null 就会写默认值。 RS 于2021年12月30日周四 17:06写道: > 有10~20个字段,这样一个个写,手都敲断了,还有其他的方式吗?或者如何开发代码适配到SQL? > > > > > > 在 2021-12-30 11:36:21,"Xuyang" 写道: > >可以使用case when试一下 > >在 2021-12-29 16:40:39,"RS" 写道: > >>Hi, > >>使用Flink SQL消费Kafka写ES,有时候有的字段不存在,不存在的不想写入ES,这种情况怎么处理呢? > >> > >> > >>比如:源数据有3个字段,a,b,c > >>insert into table2 > >>select > >>a,b,c > >>from table1 > >>当b=null的时候,只希望写入a和c > >>当c=null的时候,只希望写入a和b > >> >
Re:Re:咨询个Flink SQL的问题,如何去除null的字段
有10~20个字段,这样一个个写,手都敲断了,还有其他的方式吗?或者如何开发代码适配到SQL? 在 2021-12-30 11:36:21,"Xuyang" 写道: >可以使用case when试一下 >在 2021-12-29 16:40:39,"RS" 写道: >>Hi, >>使用Flink SQL消费Kafka写ES,有时候有的字段不存在,不存在的不想写入ES,这种情况怎么处理呢? >> >> >>比如:源数据有3个字段,a,b,c >>insert into table2 >>select >>a,b,c >>from table1 >>当b=null的时候,只希望写入a和c >>当c=null的时候,只希望写入a和b >>
Re:咨询个Flink SQL的问题,如何去除null的字段
可以使用case when试一下 在 2021-12-29 16:40:39,"RS" 写道: >Hi, >使用Flink SQL消费Kafka写ES,有时候有的字段不存在,不存在的不想写入ES,这种情况怎么处理呢? > > >比如:源数据有3个字段,a,b,c >insert into table2 >select >a,b,c >from table1 >当b=null的时候,只希望写入a和c >当c=null的时候,只希望写入a和b >
Re:咨询个Flink SQL的问题,如何去除null的字段
可以写两个insert 语句,后面用判断分开~。~ 在 2021-12-29 16:40:39,"RS" 写道: >Hi, >使用Flink SQL消费Kafka写ES,有时候有的字段不存在,不存在的不想写入ES,这种情况怎么处理呢? > > >比如:源数据有3个字段,a,b,c >insert into table2 >select >a,b,c >from table1 >当b=null的时候,只希望写入a和c >当c=null的时候,只希望写入a和b >
咨询个Flink SQL的问题,如何去除null的字段
Hi, 使用Flink SQL消费Kafka写ES,有时候有的字段不存在,不存在的不想写入ES,这种情况怎么处理呢? 比如:源数据有3个字段,a,b,c insert into table2 select a,b,c from table1 当b=null的时候,只希望写入a和c 当c=null的时候,只希望写入a和b