Hi!

感谢说明。目前 elastic search sink 确实没有这样的功能。一种方式是如其他回复所说对 SQL
进行判断,不过我觉得更好的方式是写一个自定义的 es sink。es sink 的逻辑详见 ElasticsearchDynamicSink
类,可能只需要实现一个自定义的 RowElasticsearchEmitter 就可以了。

RS <[email protected]> 于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" <[email protected]> 写道:
> >Hi!
> >
> >我不太熟悉 es,如果某一个字段不写的话,是会写入一个默认值吗?如果是的话,可以使用 coalesce 函数。coalesce(a, b, c,
> >...) 会返回第一个非 null 的值,因此只要把默认值放在最后一个,如果前面都是 null 就会写默认值。
> >
> >RS <[email protected]> 于2021年12月30日周四 17:06写道:
> >
> >> 有10~20个字段,这样一个个写,手都敲断了,还有其他的方式吗?或者如何开发代码适配到SQL?
> >>
> >>
> >>
> >>
> >>
> >> 在 2021-12-30 11:36:21,"Xuyang" <[email protected]> 写道:
> >> >可以使用case when试一下
> >> >在 2021-12-29 16:40:39,"RS" <[email protected]> 写道:
> >> >>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
> >> >>
> >>
>

回复