一、DDL 变更类型及响应策略
| DDL | 说明 |
| 新建表 | 1. 自动建表:当来源端被监控的库中出现新建表时,目标端将自动创建同结构的表及字段。2. 忽略变更:目标端忽略来源端产生的 DDL 变更消息,目标端及日志不做任何响应或消息提醒。3. 日志告警:目标端仅接收 DDL 变更消息,并在日志内打印消息内容,不触发新建表操作。4. 任务出错:目标端接收 DDL 变更消息并持续重启任务,重启过程中任务日志报错并出现数据写入异常。 |
| 新增列 | 1. 自动新增列:当来源端被监控的表中出现新增列时,目标端将自动创建同名列。2. 忽略变更:目标端忽略来源端产生的 DDL 变更消息,目标端及日志不做任何响应或消息提醒。3. 日志告警:目标端仅接收 DDL 变更消息,并在日志内打印消息内容。此策略并不触发新增列操作。4. 任务出错:目标端接收 DDL 变更消息并持续重启任务,重启过程中任务日志报错并出现数据写入异常。 |
| 删除列 | 1. 自动删除列:当来源端被监控的表中出现删除列时,目标端将自动删除同名列。2. 忽略变更:目标端忽略来源端产生的 DDL 变更消息,目标端及日志不做任何响应或消息提醒。3. 日志告警:目标端仅接收 DDL 变更消息,并在日志内打印消息内容。此策略并不触发删除列操作。4. 任务出错:目标端接收 DDL 变更消息并持续重启任务,重启过程中任务日志报错并出现数据写入异常。 |
| 重命名列 | 1. 自动重命名列:当来源端被监控的表中出现列名称变化时,目标端将自动重命名列名。2. 忽略变更:目标端忽略来源端产生的 DDL 变更消息,目标端及日志不做任何响应或消息提醒。3. 日志告警:目标端仅接收 DDL 变更消息,并在日志内打印消息内容。此策略并不触发重命名列操作。4. 任务出错:目标端接收 DDL 变更消息并持续重启任务,重启过程中任务日志报错并出现数据写入异常。 |
| 修改列类型 | 1. 自动修改列类型:当来源端被监控的库中出现列类型变化时,如字段长度变化、增加 comment 等,目标端将自动进行相应变更。2. 忽略变更:目标端忽略来源端产生的 DDL 变更消息,目标端及日志不做任何响应或消息提醒。3. 日志告警:目标端仅接收 DDL 变更消息,并在日志内打印消息内容。此策略并不触发修改列类型操作。4. 任务出错:目标端接收 DDL 变更消息并持续重启任务,重启过程中任务日志报错并出现数据写入异常。 |
| 删除表 | 1. 忽略变更:目标端忽略来源端产生的 DDL 变更消息,目标端及日志不做任何响应或消息提醒。2. 日志告警:目标端仅接收 DDL 变更消息,并在日志内打印消息内容。此策略并不触发删除表/重命名表/清空表操作。3. 任务出错:目标端接收 DDL 变更消息并持续重启任务,重启过程中任务日志报错并出现数据写入异常。 |
| 重命名表 | |
| 清空表 | |
注意:说明:
注意:针对源端“高危”的表级操作,如删除表、清空表、重命名表,目标端不支持自动响应变更,即目标端不会自动进行删除表、清空表、重命名表操作。
二、DML 及 DDL 支持情况概览
目标端是否能自动同步源端的 DML 及 DDL 变更,取决于来源端是否能捕获这些变更,以及目标端是否能响应这些变更。源端支持并且目标端也支持的情况下,对应的链路方可支持对应的 DDL 变更。如 MySQL 源端支持新增列,DLC 目标端支持新增列,则 MySQL 来源表中新增列方能自动在 DLC 目标端新增列;MySQL 源端支持删除表,Doris 目标端不支持删除表,则 MySQL 数据源中删除的表在 Doris 目标端不会自动删除。
不同的来源及目标端支持的 DML、DDL 类型及消息处理存在差异,部分数据源支持情况如下表,具体参见产品页面配置。
注意:说明:
注意:1. 读:“是” 表示读端可感知对应 DML、DDL 操作,传递变更给下游。
注意:2. 写:“是” 表示写端可跟随响应对应 DML、 DDL 变更。
注意:3. DDL 变更响应目前仅支持增量阶段,全量阶段不支持DDL变更。
| 类型 | 读(来源端) | | | | | | | | | | |
| | DML | | | DDL | | | | | | | |
| | 插入 | 删除 | 更新 | 新增列 | 删除列 | 重命名列 | 修改列类型 | 新增表 | 重命名表 | 删除表 | 清空表 |
| MySQL | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 |
| TDSQL-CMySQL | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 |
| TDSQL MySQL | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 |
| Oracle | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 否 | 是 | 是 |
| SQL Server | 是 | 是 | 是 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
| PostgreSQL | 是 | 是 | 是 | 是 | 是 | 否 | 是 | 是 | 否 | 是 | 是 |
| OceanBase | 是 | 是 | 是 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
| MongoDB | 是 | 是 | 是 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
| Kafka | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
| 类型 | 写(目标端) | | | | | | | | | | |
| | DML | | | DDL | | | | | | | |
| | 插入 | 删除 | 更新 | 新增列 | 删除列 | 重命名列 | 修改列类型 | 新增表 | 重命名表 | 删除表 | 清空表 |
| DLC | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 否 | 否 | 否 |
| Iceberg | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 否 | 否 | 否 |
| Doris | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 否 | 否 | 否 |
| StarRocks | 是 | 是 | 是 | 是 | 是 | 否 | 是 | 是 | 否 | 否 | 否 |
| TChouse-P | 是 | 是 | 是 | 是 | 否 | 否 | 否 | 是 | 否 | 否 | 否 |
| TChouse-X | 是 | 是 | 否 | 是 | 否 | 否 | 否 | 是 | 否 | 否 | 否 |
| TChouse-C | 是 | 是 | 是 | 是 | 是 | 否 | 是 | 是 | 否 | 否 | 否 |
| Elasticsearch | 是 | 是 | 是 | 是 | 是 | 是 | 否 | 是 | 否 | 否 | 否 |
| Hive | 是 | 否 | 否 | 是 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
| Kafka | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
三、DDL 解析语法要求
注意:仅符合 DDL 类型及语法要求的 SQL 可被源端解析并响应,不支持的 SQL 语句可能会导致任务异常重启等情况。请评估业务表结构变更常用语法是否符合要求,并为任务配置符合业务要求的 DDL 变更响应及写入异常处理策略。
四、MySQL
1. 重命名表(rename table)支持下列语法:
RENAME TABLE tbl_name TO new_tbl_name
2. 新建表(create table)支持下列语法:
CREATE TABLE [IF NOT EXISTS] tbl_name (create_definition,…)
CREATE TABLE new_tbl LIKE orig_tbl;
CREATE TABLE new_tbl AS SELECT * FROM orig_tbl;
注意:警告:
注意:不支持 CHECK \\ TemporaryTable 等约束。
3. 修改列(modify \\ change column) 与 重命名列(rename column)支持下列语法:
ALTER TABLE t1 MODIFY b INT NOT NULL;
ALTER TABLE t1 CHANGE b a INT NOT NULL;
4. 增加列(add column) / 重命名列 支持下列语法:
ALTER TABLE table_name
ADD new_column_name column_definition
[ FIRST | AFTER column_name ];
5. 删除列(drop column)支持下列语法:
Alter table t2 DROP [COLUMN] col_name
6. 清空表(truncate table)支持下列语法:
truncate table a;
7. 删除表(drop table)支持下列语法:
drop table a;