mysql到mysql,宽表增量失败
-
CloudCanal 社区版 v2.2.3.1
源端:MySQL ,版本5.7
对端:MySQL,版本5.7
数据问题产生阶段:增量
**问题描述:**自定义代码全部跑完,return过之后大概2s后debug断开抛出异常,
源端表结构:
CREATE TABLElegal_aid_orm_case_satisfaction
(
id
int(11) NOT NULL,
t_case_id
int(11) NOT NULL COMMENT ‘案件id’,
satisfaction_degree
varchar(50) DEFAULT NULL COMMENT ‘满意度 1-满意 2-基本满意 3-不满意 4-系统默认满意’,
dissatisfaction_reason
varchar(255) DEFAULT NULL COMMENT ‘不满意原因’,
modify_num
int(4) NOT NULL DEFAULT ‘0’ COMMENT ‘修改次数’,
signature
varchar(200) DEFAULT NULL COMMENT ‘签名认证(暂未实现)’,
creator_global_id
varchar(100) NOT NULL COMMENT ‘创建人’,
create_time
datetime NOT NULL COMMENT ‘创建时间’,
modifier_global_id
varchar(100) NOT NULL COMMENT ‘修改人’,
modify_time
datetime NOT NULL COMMENT ‘修改时间’,
is_deleted
tinyint(1) NOT NULL DEFAULT ‘0’ COMMENT ‘是否删除, 0:否, 1:是’,
data_source
int(4) NOT NULL COMMENT ‘1-审批不通过插入的数据 2-审批通过插入的数据 3-审批通过24小时候发送短信后修改的状态 4-审批通过待指派阶段评价状态’,
process_way
varchar(100) DEFAULT NULL COMMENT ‘受援人评价途径,paperless=无纸化设备 web/null=评价网页 wechat=小程序评价’,
displeasure_reason_autofill
tinyint(1) DEFAULT NULL COMMENT ‘不满意原因是否自动填充, 0:否, 1:是’,
PRIMARY KEY (id
) USING BTREE,
KEYindex_t_case_id
(t_case_id
) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
源端维表结构:
CREATE TABLElegal_aid_orm_case_satisfaction
(
id
int(11) NOT NULL,
t_case_id
int(11) NOT NULL COMMENT ‘案件id’,
satisfaction_degree
varchar(50) DEFAULT NULL COMMENT ‘满意度 1-满意 2-基本满意 3-不满意 4-系统默认满意’,
dissatisfaction_reason
varchar(255) DEFAULT NULL COMMENT ‘不满意原因’,
modify_num
int(4) NOT NULL DEFAULT ‘0’ COMMENT ‘修改次数’,
signature
varchar(200) DEFAULT NULL COMMENT ‘签名认证(暂未实现)’,
creator_global_id
varchar(100) NOT NULL COMMENT ‘创建人’,
create_time
datetime NOT NULL COMMENT ‘创建时间’,
modifier_global_id
varchar(100) NOT NULL COMMENT ‘修改人’,
modify_time
datetime NOT NULL COMMENT ‘修改时间’,
is_deleted
tinyint(1) NOT NULL DEFAULT ‘0’ COMMENT ‘是否删除, 0:否, 1:是’,
data_source
int(4) NOT NULL COMMENT ‘1-审批不通过插入的数据 2-审批通过插入的数据 3-审批通过24小时候发送短信后修改的状态 4-审批通过待指派阶段评价状态’,
process_way
varchar(100) DEFAULT NULL COMMENT ‘受援人评价途径,paperless=无纸化设备 web/null=评价网页 wechat=小程序评价’,
displeasure_reason_autofill
tinyint(1) DEFAULT NULL COMMENT ‘不满意原因是否自动填充, 0:否, 1:是’,
PRIMARY KEY (id
) USING BTREE,
KEYindex_t_case_id
(t_case_id
) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
源端维表结构2:
CREATE TABLElegal_aid_case_user_info
(
id
int(11) NOT NULL,
t_case_id
int(11) DEFAULT NULL COMMENT ‘案件id’,
t_rp_user_id
int(11) DEFAULT NULL COMMENT ‘受援人账户id’,
head_pic
varchar(200) DEFAULT NULL COMMENT ‘头像,默认-xxx’,
is_head_pic_adopt
tinyint(1) DEFAULT ‘0’ COMMENT ’ 头像状态:1: 审核通过 0: 审核不通过’,
is_authentication
tinyint(1) DEFAULT NULL COMMENT ‘是否实名认证’,
name
varchar(50) DEFAULT NULL COMMENT ‘姓名’,
birthdate
date DEFAULT NULL COMMENT ‘出生日期’,
dic_card_type
varchar(100) DEFAULT NULL COMMENT ‘证件类型1、身份证 2、户口 3、护照’,
card_code
varchar(50) DEFAULT NULL COMMENT ‘证件号’,
dic_gender
varchar(100) DEFAULT NULL COMMENT ‘性别:1、男 2、女 0、未知’,
dic_nation
varchar(100) DEFAULT NULL COMMENT ‘民族,字典:’,
dic_nationality
varchar(100) DEFAULT NULL COMMENT ‘国籍’,
t_sms_province
int(11) DEFAULT NULL COMMENT ‘省’,
t_sms_city
int(11) DEFAULT NULL COMMENT ‘市’,
t_sms_area
int(11) DEFAULT NULL COMMENT ‘地区’,
mobile
varchar(50) DEFAULT NULL COMMENT ‘电话’,
regis
varchar(200) DEFAULT NULL COMMENT ‘户籍’,
dic_health
varchar(100) DEFAULT NULL COMMENT ‘健康状况:1、优 2、良 3、中 4、一般’,
usual_addr
varchar(200) DEFAULT NULL COMMENT ‘常住地’,
dic_edu_level
varchar(100) DEFAULT NULL COMMENT ‘文化程度:1、博士 2、硕士 3、本科 4、大专 5、中专和中技 6、高中 7、初中 8、小学及小学以下’,
dic_legal_inst_way
varchar(100) DEFAULT NULL COMMENT ‘文书送达方式:1、邮寄 2、自取’,
work_unit
varchar(200) DEFAULT NULL COMMENT ‘单位’,
legal_inst_addr
varchar(200) DEFAULT NULL COMMENT ‘文书邮寄地址’,
dic_occupation
varchar(100) DEFAULT NULL COMMENT ‘职业:1、国家机关、党群组织、企业、事业单位负责人 2、专业技术人员 3、商业、服务业人员 4、农、林、牧、渔、水利业生产人员 5、生产、运输设备操作人员及有关人员 6、军人 7、不便分类的其他从业人员’,
zip_code
int(11) DEFAULT NULL COMMENT ‘邮编’,
remark
varchar(500) DEFAULT NULL COMMENT ‘备注’,
family_size
int(11) DEFAULT NULL COMMENT ‘家庭人数’,
family_income
int(11) DEFAULT NULL COMMENT ‘家庭总收入’,
per_monthly_income
int(11) DEFAULT NULL COMMENT ‘人均月收入’,
per_monthly_outcome
int(11) DEFAULT NULL COMMENT ‘人均月开支’,
is_property
tinyint(1) DEFAULT NULL COMMENT '是否有房产, 0: 否, 1: 是 ',
acreage
varchar(50) DEFAULT NULL COMMENT ‘面积, 单位:平方米’,
is_car
tinyint(1) DEFAULT NULL COMMENT ‘是否有汽车’,
is_other_assets
tinyint(1) DEFAULT NULL COMMENT ‘是否有现金、存款、证券’,
is_villa
tinyint(1) DEFAULT NULL COMMENT ‘是否有别墅、高档住宅’,
is_apply
tinyint(1) DEFAULT NULL COMMENT ‘是否曾经申请过法律援助事项’,
apply_address
varchar(100) DEFAULT NULL COMMENT ‘曾经申请地点’,
apply_date
date DEFAULT NULL COMMENT ‘曾经申请时间’,
asset_total_value
int(11) DEFAULT NULL COMMENT ‘资产总价值’,
creator_global_id
varchar(100) NOT NULL COMMENT ‘创建人’,
create_time
datetime NOT NULL COMMENT ‘创建时间’,
modifier_global_id
varchar(100) NOT NULL COMMENT ‘修改人’,
modify_time
datetime NOT NULL COMMENT ‘修改时间’,
is_deleted
tinyint(1) NOT NULL DEFAULT ‘0’ COMMENT ‘是否删除, 0:否, 1:是’,
judicial_id
varchar(100) DEFAULT NULL COMMENT ‘对应司法部上报的id’,
zw_user_id
varchar(100) DEFAULT NULL COMMENT ‘政务网用户的的id’,
PRIMARY KEY (id
) USING BTREE,
KEYt_rp_user_id
(t_rp_user_id
) USING BTREE,
KEYt_caseId_index
(t_case_id
) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT=‘案件_用户信息表’;
对端表结构:
CREATE TABLEsatisfaction
(
id
int(11) NOT NULL AUTO_INCREMENT COMMENT ‘主键’,
table_id
varchar(50) NOT NULL COMMENT ‘关联表主键’,
name
varchar(30) DEFAULT NULL COMMENT ‘姓名’,
phone
varchar(30) DEFAULT NULL COMMENT ‘手机号’,
satisfaction
int(11) NOT NULL COMMENT ‘满意度’,
new_project
varchar(50) NOT NULL COMMENT ‘办件号’,
new_district
bigint(20) DEFAULT NULL COMMENT ‘地区’,
evaluate_time
varchar(30) DEFAULT NULL COMMENT ‘评价时间’,
type
varchar(30) DEFAULT NULL COMMENT ‘类型’,
is_del
tinyint(1) DEFAULT NULL COMMENT ‘是否删除 0:未删除 1:删除’,
PRIMARY KEY (id
) USING BTREE,
KEYidx_phone
(phone
) USING BTREE,
KEYidx_project_id
(new_project
) USING BTREE,
KEYidx_time
(evaluate_time
) USING BTREE,
KEYidx_type
(type
) USING BTREE,
KEYidx_satisfaction
(satisfaction
) USING BTREE,
KEYidx_select
(satisfaction
,new_district
,evaluate_time
,type
) USING BTREE,
KEYidx_area
(new_district
) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=8424678 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT=‘12类办件满意度总表’;查询SQL:
全量:
第一个维表查询
SELECTsatisfaction_degree
FROMplsms_biz_data
.legal_aid_orm_case_satisfaction
WHEREt_case_id
=530397
第二个维表查询
com.mysql.cj.jdbc.ClientPreparedStatement: SELECTname
,mobile
FROMplsms_biz_data
.legal_aid_case_user_info
WHEREid
=464523增量update时因为维表关联键没有进行映射故而先去查询源端关联维表主键:
SELECT t_rp_user_id FROMplsms_biz_data
.legal_aid_orm_case
WHEREid
=?
再去查询维表
com.mysql.cj.jdbc.ClientPreparedStatement: SELECTname
,mobile
FROMplsms_biz_data
.legal_aid_case_user_info
WHEREid
=?SELECT
orm_case.id ,
user_info.name,
user_info.mobile,
a.satisfaction_degree satisfaction
orm_case.new_project,
orm_case.new_district,
orm_case.create_time,
‘legal-examine’ type
from legal_aid_orm_case orm_case
left join legal_aid_orm_case_satisfaction a on orm_case.id = a.t_case_id
left join legal_aid_case_user_info user_info on orm_case.t_rp_user_id = user_info.id -
最后一个连表SQL主要是三张表的关联关系,因为第一个评论维表是与源表主键ID相关联的,我这边宽表也是有映射的。第二个用户表没有映射,update时源表t_rp_user_id为空,无法查询数据,故先去根据主键ID把源表的t_rp_user_id查询出来再根据t_rp_user_id查询第二张维表中的name,mobile字段。