doris的group commit使用问题

Viewed 37

背景:项目中是使用mysql协议直接连接doris,发现保存数据时,insert into mytable values ..语句执行效率和mysql库相差较大,所以想试试group commit配置。
url配置:原本是jdbc:mysql://ip:9030/mydatabase?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
替换为:jdbc:mysql://ip:9030/epc_syzs_smk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true&useServerPrepStmts=true&useLocalSessionState=true&rewriteBatchedStatements=true&cachePrepStmts=true&prepStmtCacheSqlLimit=99999&prepStmtCacheSize=500&sessionVariables=group_commit=sync_mode
发现的问题:
1、在insert into 时,出现相同的sql重复执行的情况
2、两个表根据相同的列event_time进行分区,
sql语句: SELECT count(0)FROM table1 c LEFT JOIN table2 p ON c.epc_code = p.epc_code WHERE。。。
关联查询时,出现java.sql.SQLIntegrityConstraintViolationException: errCode = 2, detailMessage = Column 'event_time' in field list is ambiguous。

2 Answers
  1. Doris 具体的版本号
  2. 重复执行,你们有排查过你们是不是你们程序重复请求了吗?只有提交到Doris的数据才会被导入,可能先排查下你们业务程序?
  3. 提供下建表语句和测试sql

1、doris的版本号是2.1.9
2、重复insert问题排查出来了,是日志的问题。但是用group commit的url配置(改为同步),耗时时间还是挺长的
3、建表语句:
drop table if EXISTS epc_cde_coding;
CREATE TABLE epc_cde_coding
(
epc_code VARCHAR(255) NOT NULL COMMENT "编码",
product_id VARCHAR(255) NOT NULL COMMENT "产品ID",
batch_code VARCHAR(255) NOT NULL COMMENT "批次号",
event_time datetime NOT NULL COMMENT '事件时间',
mfg DATETIME NOT NULL COMMENT "生产日期",
id VARCHAR(32) NOT NULL COMMENT "主键",
create_by VARCHAR(32) COMMENT "创建人",
create_time DATETIME COMMENT "创建时间",
update_time DATETIME COMMENT "更新时间",
update_by VARCHAR(32) COMMENT "更新人",
tracking_code VARCHAR(255) COMMENT "最小包装标识码",
ori_code VARCHAR(255) COMMENT "原始来源编码",
batch_id VARCHAR(255) COMMENT "批次id",
code_organization VARCHAR(255) COMMENT "码机构",
package_level INT COMMENT "包装层级",
code_number INT COMMENT "对应一级码的数量",
event_id VARCHAR(255) COMMENT "事件ID",
exp VARCHAR(255) COMMENT "失效日期",
product_name VARCHAR(255) COMMENT "产品名称",
packaging_specification VARCHAR(255) COMMENT "药品或器械的包装规格",
module VARCHAR(255) COMMENT "模块,cde/fde/cdr/fdr",
event_code_type varchar(255) DEFAULT NULL COMMENT 'eventCode码类型:DataFormatTypeEnum类'
) ENGINE = OLAP
UNIQUE KEY (epc_code, product_id, batch_code, event_time)
COMMENT "赋码追溯码表"
AUTO PARTITION BY RANGE (date_trunc(event_time, 'year'))() --自动创建分区,数据插入时创建
DISTRIBUTED BY HASH ( epc_code ) BUCKETS 9
PROPERTIES (
"replication_num" = "3",-- 副本数,和集群的副本数保持一致
"storage_format" = "V2",
"dynamic_partition.enable" = "false", -- 关闭动态分区,使用自动分区
"dynamic_partition.time_unit" = "YEAR",
"dynamic_partition.start" = "-50", -- 保留历史50年的数据
"dynamic_partition.end" = "0", -- Dynamic Partition 不创建分区
"dynamic_partition.create_history_partition" = "false", -- Dynamic Partition 不自动创建历史分区
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "9", -- 动态分区的分桶数(与表分桶数一致)
"bloom_filter_columns" = "ori_code" -- bloom_filter索引,用于查询是否存在的场景,不存在是一定不存在,存在是不一定存在
);
drop table if EXISTS epc_cde_event_code;
CREATE TABLE epc_cde_event_code
(
epc_code varchar(255) DEFAULT NULL COMMENT '编码',
dept_id varchar(255) DEFAULT NULL COMMENT '企业或部门id',
event_id varchar(255) DEFAULT NULL COMMENT '事件ID',
event_time DATETIME NOT NULL COMMENT '事件时间',
product_id varchar(255) DEFAULT NULL COMMENT '产品ID',
batch_code varchar(255) DEFAULT NULL COMMENT '批次号',
mfg DATETIME DEFAULT NULL COMMENT '生产日期',
id varchar(32) NOT NULL COMMENT '主键',
create_by varchar(32) DEFAULT NULL COMMENT '创建人',
create_time datetime DEFAULT NULL COMMENT '创建时间',
update_time datetime DEFAULT NULL COMMENT '更新时间',
update_by varchar(32) DEFAULT NULL COMMENT '更新人',
event_type varchar(255) DEFAULT NULL COMMENT '事件类型',
epc_parent_code varchar(255) DEFAULT NULL COMMENT '父级编码',
tracking_code varchar(255) DEFAULT NULL COMMENT '最小标识码',
product_type varchar(255) DEFAULT NULL COMMENT '产品类型,见EpcDrugCategoryEnum',
ori_code varchar(255) DEFAULT NULL COMMENT '原始来源编码(xml中的码)',
code_number int DEFAULT NULL COMMENT '对应一级码的数量',
batch_id varchar(255) DEFAULT NULL COMMENT '批次id',
exp varchar(255) DEFAULT NULL COMMENT '失效日期',
event_dept_id varchar(255) DEFAULT NULL COMMENT '事件发生企业的id(关联入驻企业表id)',
event_dept_name varchar(255) DEFAULT NULL COMMENT '事件发生企业的名称',
product_name varchar(255) DEFAULT NULL COMMENT '产品名称',
event_code_type varchar(255) DEFAULT NULL COMMENT 'eventCode码类型:DataFormatTypeEnum类',
dept_name varchar(255) DEFAULT NULL COMMENT '企业或部门名称',
event_category int DEFAULT NULL COMMENT '事件类别(对应页面列表,出库、入库、使用)事件类别,见EpcisEventCategoryEnum',
branch varchar(255) DEFAULT NULL COMMENT '所属分局',
juris varchar(255) DEFAULT NULL COMMENT '所属分区',
event_dept_entry_type varchar(50) DEFAULT NULL COMMENT '事件发生企业入驻类型',
module VARCHAR(255) COMMENT "模块,cde/fde/cdr/fdr",
dept_entry_type varchar(50) DEFAULT NULL COMMENT '企业入驻类型'
) ENGINE=OLAP
DUPLICATE KEY(epc_code) -- 根据epc_code查event_id
COMMENT '事件追溯码表(大数据量)'
AUTO PARTITION BY RANGE (date_trunc(event_time, 'year'))() --自动创建分区,数据插入时创建
DISTRIBUTED BY HASH(epc_code) BUCKETS 9
PROPERTIES (
"replication_num" = "3",-- 副本数,和集群的副本数保持一致
"storage_format" = "V2",
"dynamic_partition.enable" = "false", -- 关闭动态分区,使用自动分区
"dynamic_partition.time_unit" = "YEAR",
"dynamic_partition.start" = "-50", -- 保留历史50年的数据
"dynamic_partition.end" = "0", -- Dynamic Partition 不创建分区
"dynamic_partition.create_history_partition" = "false", -- Dynamic Partition 不自动创建历史分区
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "9" -- 动态分区的分桶数(与表分桶数一致)
);
drop table if EXISTS epc_cde_package;
CREATE TABLE epc_cde_package
(
epc_code VARCHAR(255) COMMENT '编码',
product_id VARCHAR(255) COMMENT '产品ID',
batch_code VARCHAR(255) COMMENT '批次号',
event_time datetime NOT NULL COMMENT '事件时间,包装内此字段若无特殊要求,建议设置为生产日期',
mfg DATETIME COMMENT '生产日期',
id VARCHAR(32) COMMENT '主键',
create_by VARCHAR(32) COMMENT '创建人',
create_time DATETIME COMMENT '创建时间',
update_time DATETIME COMMENT '更新时间',
update_by VARCHAR(32) COMMENT '更新人',
epc_parent_code VARCHAR(255) COMMENT '父级编码',
tracking_code VARCHAR(255) COMMENT '最小包装标识码',
ori_code VARCHAR(255) COMMENT '原始来源编码',
code_organization VARCHAR(255) COMMENT '码机构',
tree_id VARCHAR(255) COMMENT '树id',
package_level INT COMMENT '包装层级',
code_number INT COMMENT '对应一级码的数量',
batch_id VARCHAR(255) COMMENT '批次id',
exp VARCHAR(255) COMMENT '失效日期',
product_name VARCHAR(255) COMMENT '产品名称',
event_id VARCHAR(255) COMMENT '事件ID',
file_id VARCHAR(255) COMMENT '文件ID',
packaging_specification VARCHAR(255) COMMENT '药品或者器械的包装规格',
module VARCHAR(255) COMMENT "模块,cde/fde/cdr/fdr",
event_code_type varchar(255) DEFAULT NULL COMMENT 'eventCode码类型:DataFormatTypeEnum类'
) ENGINE=OLAP
UNIQUE KEY(epc_code, product_id, batch_code, event_time) -- 根据epc_code查父级,用父级码去epc_cde_event_code表查event_id,用event_id查流向
COMMENT '追溯码包装层级关系表(大数据量)'
AUTO PARTITION BY RANGE (date_trunc(event_time, 'year'))() --自动创建分区,数据插入时创建
DISTRIBUTED BY HASH(epc_code) BUCKETS 9
PROPERTIES (
"replication_num" = "3",-- 副本数,和集群的副本数保持一致
"storage_format" = "V2",
"dynamic_partition.enable" = "false", -- 关闭动态分区,使用自动分区
"dynamic_partition.time_unit" = "YEAR",
"dynamic_partition.start" = "-50", -- 保留历史50年的数据
"dynamic_partition.end" = "0", -- Dynamic Partition 不创建分区
"dynamic_partition.create_history_partition" = "false", -- Dynamic Partition 不自动创建历史分区
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "9" -- 动态分区的分桶数(与表分桶数一致)
);

关联查询测试sql:
SELECT
c.event_id,
c.product_id,
c.epc_code,
p.batch_code,
p.package_level,
p.tree_id,
p.epc_parent_code,
p.product_name,
p.packaging_specification AS packagingSpecification
FROM
epc_cde_event_code c
LEFT JOIN epc_cde_package p ON c.epc_code = p.epc_code
where c.event_id ="" and p.batch_code="" and p.product_id="" and p.module=""

新增测试sql:INSERT INTO epc_cde_coding (id,create_by,create_time,update_time,update_by,epc_code,product_id,product_name,tracking_code,ori_code,batch_id,batch_code,code_organization,package_level,code_number,event_id,event_time,mfg,exp,packaging_specification,event_code_type,module) VALUES ('1949661767046053889','04a46aa7e1144fa8869e67c8e0b0c012','2025-07-28 10:42:38',NULL,NULL,'81646461180814853777','1945008301816266754','缬沙坦分散片','8164646','urn:gdst:msfx.cn:product:class:81646461180814853777','1949661750215311360','20240324','2',1,NULL,'1949661750102065152','2024-03-29 00:00:00','2024-03-29 00:00:00','2026-02-28','14片/盒','MSFXYP','cdr') , ('1949661767046053890','04a46aa7e1144fa8869e67c8e0b0c012','2025-07-28 10:42:38',NULL,NULL,'81646461182735174881','1945008301816266754','缬沙坦分散片','8164646','urn:gdst:msfx.cn:product:class:81646461182735174881','1949661750215311360','20240324','2',1,NULL,'1949661750102065152','2024-03-29 00:00:00','2024-03-29 00:00:00','2026-02-28','14片/盒','MSFXYP','cdr') , ('1949661767046053891','04a46aa7e1144fa8869e67c8e0b0c012','2025-07-28 10:42:38',NULL,NULL,'81646461182796162997','1945008301816266754','缬沙坦分散片','8164646','urn:gdst:msfx.cn:product:class:81646461182796162997','1949661750215311360','20240324','2',1,NULL,'1949661750102065152','2024-03-29 00:00:00','2024-03-29 00:00:00','2026-02-28','14片/盒','MSFXYP','cdr');