Doris2.1.6 部分列更新场景,后面的更新会覆盖之前的更新

Viewed 86

使用mybatis框架,定义如下部分列更新:连续执行,后执行的更新会覆盖前面的更新,把第二次更新不包含的列置为null,在2.0.10上执行是正常的。

<insert id="updateabc">
    SET enable_unique_key_partial_update = true;
    insert into tableA(a,b,c) select * from tableB;
    SET enable_unique_key_partial_update = false;
</insert>


<insert id="updateefg">
    SET enable_unique_key_partial_update = true;
    insert into tableA(e,f,g) select * from tableC;
    SET enable_unique_key_partial_update = false;
</insert>

补充:
enable_insert_strict的值为false

建表DDL(部分列):

CREATE TABLE `dws_dev_sprint_issue` (
  `issue_id` varchar(64) NOT NULL COMMENT '问题id',
  `sprint_id` varchar(64) NOT NULL COMMENT '所属迭代id',
  `jira_featureteam_id` varchar(64) NULL COMMENT '所属jira特性团队',
  `product_lingbo_id` varchar(64) NULL COMMENT '备案产品ID',
  `summary` text NULL COMMENT '概要字段',
  `jira_featureteam_name` varchar(64) NULL COMMENT '所属jira团队',
  `issue_key` varchar(50) NULL COMMENT '问题关键字',
  `moscow` varchar(50) NULL COMMENT '问题关键字',
  `fix_version_id` text NULL COMMENT '修复版本id(可能多个),可能多个id,逗号分隔,1,2,3,',
  `fix_version_name` text NULL COMMENT '修复版本',
  `issue_created` datetime NULL COMMENT 'issue创建时间',
  `is_in_plan` boolean NULL COMMENT '计划开始时间是否在迭代',
  `story_point_plan` decimal(10,2) NULL COMMENT '计划开始时刻故事点数',
  `issue_status_plan` varchar(50) NULL COMMENT '计划开始时刻状态名称',
  `issue_standard_status_plan` varchar(50) NULL COMMENT '计划开始时刻标准工作流状态名称',
  `issue_type_plan` varchar(50) NULL COMMENT '计划开始时刻问题类型名称',
  `status_category_plan` varchar(50) NULL COMMENT '计划时间时刻工作流状态分类'
) ENGINE=OLAP
UNIQUE KEY(`issue_id`, `sprint_id`)
COMMENT '该表描述了与迭代相关的issue信息:issue是否在计划中,结束时刻是否在迭代中, 结束状态, story_point等信息, 用于描述issue在研发管理过程中的变化-5min'
DISTRIBUTED BY HASH(`sprint_id`) BUCKETS 10
PROPERTIES (
"replication_allocation" = "tag.location.default: 3",
"min_load_replica_num" = "-1",
"is_being_synced" = "false",
"storage_medium" = "hdd",
"storage_format" = "V2",
"inverted_index_storage_format" = "V1",
"enable_unique_key_merge_on_write" = "true",
"light_schema_change" = "true",
"disable_auto_compaction" = "false",
"enable_single_replica_compaction" = "false",
"group_commit_interval_ms" = "10000",
"group_commit_data_bytes" = "134217728",
"enable_mow_light_delete" = "false"
);

部分更的SQL,分别通过JDBC直连执行,是正常的,放到spring+mybatis的框架里就不行了。使用的工程模板是:https://github.com/apache/doris/tree/master/samples/doris-demo/spring-jdbc-demo

<insert id="updateabc">
    SET enable_unique_key_partial_update = true;
    insert into tableA(a,b,c) select * from tableB;
    SET enable_unique_key_partial_update = false;
</insert>

上面的SQL片段,如果删掉 SET enable_unique_key_partial_update = false; 就是正确的,但是会影响其它的SQL执行。

2 Answers

这里的建表语句是什么样的?这两个sql单独在doris里面执行结果是什么样的?

SET enable_unique_key_partial_update = true;insert into tableA(e,f,g) select * from tableC;SET enable_unique_key_partial_update = false;

如果将上面分号分隔的多个SQL,发送给Doris, 是顺序执行还是并发执行?