MySQL到DWS实时同步中,同步新增列的DDL时报错怎么办?
问题描述
1. 运行migration mysql2dws链路的实时同步作业,DDL同步中对增加列操作设置为“正常处理”。
2. 在目的端DWS表有数据的场景下,源端MySQL执行DDL语句,添加带非空约束的列,默认值为空字符串,如:alter table test add column t_col varchar(30) not null default ''
3. migration作业产生异常,报错执行DDL失败,失败原因为:column "t_col" contains null values。
原因分析
DWS数据库为oracle兼容模式时,会将空字符串视为NULL做处理,因此在有数据的场景下,不能添加默认值为空串的非空列。
解决方案
1. 修改源端DDL语句,新增列的默认值设置为非空字符串。
2. 如果无法修改DDL,则需要将DWS的数据库更换为mysql兼容模式,建库语句如:create database bigdata with encoding 'UTF-8' dbcompatibility 'mysql' template template0;