关于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
首页 最近更新 搜索 提交 回复