关于Apache ignite的MERGE 如果存在重复数据 覆盖或忽略
最后更新:2025-07-24 11:08:52
|
状态:未完成
public static void override() throws Exception{
String tab = "tab_override";
Table table = service.metadata().table(tab);
if(null != table){
service.ddl().drop(table);
}
//表必须有主键
table = new Table(tab);
table.addColumn("ID", "BIGINT").setPrimaryKey(true);
table.addColumn("CODE", "varchar(10)");
service.ddl().create(table);
DataRow row = new DataRow();
row.put("ID", 1);
row.put("CODE", 'C1');
service.insert(tab, row);
row = new DataRow();
row.put("ID", 1);
row.put("CODE", "C2");
//相同主键覆盖,实际执行MERGE INTO,这时CODE被更新成C2
service.insert(tab, row, new DefaultConfigStore().override(Boolean.TRUE));
set = service.querys(tab);
System.out.println(set);
row = new DataRow();
row.put("ID", 1);
row.put("CODE", 'C2');
//不覆盖,会生成INSERT,因为重复所以抛出异常
service.insert(tab, row, new DefaultConfigStore().override(Boolean.FALSE));
}
PG也提供了类似的功能,可以根据唯一约束 也可以根据指定列来判断重复,参考【关于PostgreSQL的ON CONFLICT】
Apache ignite也提供了类似的功能(根据主键)参考【Apache ignite MERGE】