Re:Re: 咨询个Flink SQL的问题,如何去除null的字段

2022-01-06 文章 RS
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的字段

2021-12-30 文章 Caizhi Weng
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的字段

2021-12-30 文章 RS
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的字段

2021-12-30 文章 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的字段

2021-12-30 文章 RS
有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的字段

2021-12-29 文章 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的字段

2021-12-29 文章 Michael Ran
可以写两个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的字段

2021-12-29 文章 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