使用insert into 进行部分列更新的时候,其余列被覆盖

Viewed 161

doris 版本 : 2.1.5
相关语句 : set enable_unique_key_partial_update=true;set enable_insert_strict=false;insert into user_basic_profile (device_id, property) values (xxx,xxx)
方式:spring jdbcTemplate
参考设置文档:https://doris.apache.org/zh-CN/docs/2.1/data-operate/update/update-of-unique-model?_highlight=%E9%83%A8%E5%88%86&_highlight=%E5%88%97#%E9%83%A8%E5%88%86%E5%88%97%E6%9B%B4%E6%96%B0 (已全部设置)
问题:部分列更新的时候,其余列被覆盖。2.0.6没问题,2.1.5其余列被覆盖
补充:将上文中的两个参数设置成全局参数时,可以正常更新。但是像上面一样放在SQL里面在 2.1.5 是会将其余列置空的。

2 Answers

麻烦补齐下spring jdbcTemplate 的 复现demo,这边本地定位看看的。

从版本2.1.0升级到2.1.5后遇到了类似的问题。
现象:使用部分列更新时,set命令和insert命令JDBC一起执行,set会不生效,其他列数据被置空。

原来的调用方法:

try (Connection connection = getConnection(); PreparedStatement stmt = connection.prepareStatement("set enable_insert_strict=false;\n" +
            "set enable_unique_key_partial_update=true;\n" +
            "INSERT INTO t_tag_10001716 (user_key, ol_attr_5971) \n" +
            "select user_key, ol_attr_5971 from (select sth0813_target.base_id user_key, sth0813_target.base_id ol_attr_5971 from sth0813_target) as cc;")) {
            stmt.execute();
        }

临时解决方法:

try (Connection connection = getConnection(); PreparedStatement stmt = connection.prepareStatement("select 1")) {
            stmt.execute("set enable_insert_strict=false");
            stmt.execute("set enable_unique_key_partial_update=true");
            stmt.execute("INSERT INTO t_tag_10001716 (user_key, ol_attr_5973) \n" +
                "select user_key, ol_attr_5973 from (select sth0813_target.base_id user_key, sth0813_target.attr2 ol_attr_5973 from sth0813_target) as cc;");
        }

将set命令和insert分开执行后,部分列更新生效。