关于Apache ignite的MERGE 如果存在重复数据 覆盖或忽略
最后更新:2024-05-13 05:30:01
|
状态:未完成
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】