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 > >> >> > >> >
