FlinkSql使用ES sink并指定主键,为什么数据还是会被覆盖? 根据ES connector文档中的描述,创建ES表并指定主键后将采用upsert模式。 但是在实际的使用过程中却发现部分数据仍然存在被直接覆盖的问题。 举个例子,假如ES中本来的数据如下图中示例1所示,在FlinkSql中要写入的数据如示例2所示,按照upsert的理解执行结果应该如示例3所示,但实际结果为示例4所示,即对整个json文档进行了覆盖,而不是部分字段的更新。 实际发生问题的场景如下: 情形一:在任务启动前es中已经存在数据,任务启动后,发现部分主键key对应的json文档直接被覆盖成任务中新写入的数据 情形二:任务中存在A和B两个insert into语句往同一个es表中写入数据,A和B除主键key之外其他写入的字段不完全相同,任务启动后,发现部分主键key对应的数据只包含A或B的结果。 上述两种情景的sql中均包含join、groupBy等操作。 针对上述问题,在网上查找一番后并未直接找到结果。大多数给出的答案正如官方文档所述,会执行upsert操作。...