本文介绍实时同步任务中,源端表结构发生变化后,DataSail 能否同步修改目标表结构,以及各类变更的使用约束。
DataSail 支持在实时同步过程中,将源表的建表、新增字段、删除字段、字段重命名和字段类型变更同步到目标表。各项能力的支持范围取决于同步模式、源端和目标端组合,详见 2 支持的链路与 DDL 类型。
一项变更生效,需要同时满足以下条件:
下表说明不同同步模式下支持的表结构变更。其中,“有限支持”表示需满足相应类型兼容性等约束;“不支持”表示该同步模式不支持相应的自动变更。具体可选操作以任务配置页面为准。
将源端多张表同步到目标端对应表时,支持的表结构变更如下:
源端 → 目标端 | 建表 | 新增字段 | 删除字段 | 字段重命名 | 字段类型变更 | 默认执行项 |
|---|---|---|---|---|---|---|
MySQL / veDB / PostgreSQL → ByteHouse CDW | 支持 | 支持 | 支持 | 支持 | 有限支持 | 加列 |
MySQL / veDB / PostgreSQL → ByteHouse CE | 支持 | 支持 | 支持 | 支持 | 有限支持 | 加列、改类型 |
MySQL / veDB / PostgreSQL → StarRocks | 支持 | 支持 | 支持 | 不支持 | 有限支持 | 加列、改类型 |
MySQL / veDB / PostgreSQL → Doris | 支持 | 支持 | 支持 | 不支持 | 有限支持 | 加列、改类型 |
MySQL → Iceberg | 支持 | 支持 | 不支持 | 支持 | 有限支持 | 加列 |
MySQL / veDB / PostgreSQL → Paimon | 不支持 | 支持 | 不支持 | 不支持 | 不支持 | 加列 |
说明
实时分库分表同步方案将多个源分表同步到目标表,支持范围与实时整库同步不同,如下:
源端 → 目标端 | 建表 DDL | 新增字段 | 删除字段 | 字段重命名 | 字段类型变更 | 默认执行项 |
|---|---|---|---|---|---|---|
MySQL / veDB / PostgreSQL → ByteHouse CDW | 不支持 | 支持 | 不支持 | 不支持 | 有限支持 | 加列 |
MySQL / veDB → ByteHouse CE | 不支持 | 支持 | 支持 | 支持 | 有限支持 | 加列、改类型 |
MySQL / veDB / PostgreSQL → StarRocks | 不支持 | 支持 | 不支持 | 不支持 | 有限支持 | 加列、改类型 |
MySQL / veDB / PostgreSQL → Doris | 不支持 | 支持 | 不支持 | 不支持 | 有限支持 | 加列、改类型 |
使用 Schema 变更同步前,需要满足以下条件:
条件 | 用户需要确认的内容 |
|---|---|
表在同步范围内 | 发生变更的源表已被任务选中;新建源表需符合任务的选表和新表发现规则。 |
已开启对应变更策略 | 在任务中允许执行相应操作,例如新增字段、删除字段或修改字段类型。选择忽略时,不会执行对应目标表结构变更。 |
目标端具备执行权限 | 任务使用的目标端账号有相应建表、修改表结构等权限,且目标表满足后文列出的变更约束。 |
策略 | 行为 |
|---|---|
自动处理 | 自动执行支持范围内的目标表结构变更;仍需满足目标端权限、表模型和类型兼容等要求。 |
忽略变更 | 不执行对应的目标表结构变更。源表变化仍可能影响后续数据写入,需确保目标表与变更后的数据兼容。 |
日志告警 | 记录变更信息,不执行对应的目标表结构变更。 |
任务出错 | 遇到对应变更时使任务处理失败,需处理该变更或调整策略后恢复同步。 |
以下说明适用于 2 支持的链路与 DDL 类型中列出的同步模式和操作。表格按目标数据源说明能力和约束;有源端或同步模式限制时单独注明。
类别 | 项目 | 说明 |
|---|---|---|
能力说明 | 支持行为 | 根据源表结构和任务中的目标建表配置创建目标表。 |
策略条件 | 执行策略 | 将建表策略设为“自动处理”;目标端账号需具备建表权限,并提前准备任务所需的目标数据库等资源。 |
目标数据源 | ByteHouse / StarRocks / Doris | 表引擎、主键或排序键、分区、分桶等按目标端规则和任务配置创建,可能与源表不同。 |
Iceberg | 仅支持 MySQL 实时整库同步;需正确配置目标存储位置、表格式和分区。历史数据是否同步取决于任务的全量同步设置。 | |
约束 | 新增源表 | 仅同步符合任务选表、新表发现及目标表映射规则的新增源表。 |
已有目标表 | 目标表已存在时,需提前确认字段、键、类型和写入方式与任务配置兼容;建表操作不会自动修复已有表的结构差异。 |
类别 | 项目 | 说明 |
|---|---|---|
能力说明 | 支持行为 | 在目标表中新增字段,后续数据按任务中的字段映射写入。 |
策略条件 | 执行策略 | 将新增字段策略设为“自动处理”;目标表必须已存在或已成功创建。 |
目标数据源 | ByteHouse | 支持新增字段,但不保留源端通过 |
StarRocks | 支持通过 | |
Doris | 支持新增字段;目标列顺序可能与源端通过 | |
Iceberg | 目标新增列位置可能与源端不同;新增后需确认目标字段定义与任务的写入字段匹配。 | |
Paimon | 仅支持在末尾新增字段,指定非末尾位置会失败;新增字段类型需能转换为目标类型,不支持自动同步源端注释和默认值定义。 | |
约束 | 字段范围 | 支持新增普通字段,建议使用可空字段;不支持通过新增字段同步生成列、复杂表达式,以及主键或分区键的变更。 |
非空与默认值 | 目标字段的可空属性可能与源端 | |
固定映射 | 使用固定字段清单或字段映射时,需将新字段加入同步范围,并配置对应的目标字段。 |
类别 | 项目 | 说明 |
|---|---|---|
能力说明 | 支持行为 | 删除目标表中的对应字段,后续数据不再写入该字段。 |
策略条件 | 执行策略 | 将删除字段策略设为“自动处理”;默认策略为“忽略变更”,请在变更前确认任务配置。 |
目标数据源 | ByteHouse / StarRocks / Doris | 删除字段需满足目标表模型和依赖关系要求;不满足时,变更可能失败。 |
Iceberg / Paimon | 暂不支持自动同步字段删除。 | |
约束 | 所有目标 | 仅支持删除普通、无依赖字段。涉及主键、唯一键、排序键、分区键,或被表达式、索引、物化视图等引用的字段,需先处理相关约束和依赖。 |
下游影响 | 固定映射、计算表达式和消费端可能仍引用原字段,需同步调整。 | |
忽略删列 | 选择“忽略变更”时,目标表保留该字段,但源端后续记录不再提供其值。目标端可能填入空值或默认值,也可能因字段约束导致写入失败;请检查目标字段要求。 |
类别 | 项目 | 说明 |
|---|---|---|
目标数据源 | ByteHouse | 支持普通字段重命名,需将字段重命名策略设为“自动处理”。原字段须存在,新字段名不得与已有字段冲突,并需满足目标表依赖约束;ByteHouse CDW 分库分表同步暂不支持。 |
StarRocks / Doris | 不支持自动同步字段重命名。 | |
Paimon | 暂不支持自动同步字段重命名。 | |
MySQL → Iceberg,实时整库 | 仅适用于任务配置页面提供字段重命名策略的环境,并需将该策略设为“自动处理”;新字段名不得与已有字段冲突,变更需满足目标表标识字段及依赖关系要求。 | |
约束 | MySQL | 同时修改字段名和类型时,两项变更均需满足支持范围并开启对应策略;执行失败时,可能只有部分变更生效。 |
字段映射 | 原字段名被字段清单、别名映射或表达式引用时,需同步修改相关配置。 | |
替代处理 | 删除旧字段后再新增字段可能丢失旧字段的历史数据。采用此方式时,需单独迁移并核对历史数据。 |
类别 | 项目 | 说明 |
|---|---|---|
能力说明 | 支持行为 | 根据源字段的新类型及类型映射规则,修改目标字段类型。 |
策略条件 | 执行策略 | 将字段类型变更策略设为“自动处理”。 |
目标数据源 | ByteHouse | 需满足目标表引擎、字段用途和类型转换要求;目标表结构变更在各节点生效需要时间,等待超时可能导致任务失败。 |
StarRocks / Doris | 需满足目标表模型、键列和类型变更规则;修改后的目标字段可能允许空值,与源端 | |
Iceberg | 仅适用于已开启类型变更策略的 MySQL 实时整库同步,支持符合目标类型转换规则的基本类型变更。复杂类型或不兼容的变更可能被跳过,目标字段保持原类型;变更后需核对目标字段类型。 | |
Paimon | 暂不支持自动同步字段类型变更。 | |
约束 | 通用限制 | 目标字段类型由类型映射规则和目标端支持的转换决定;类型名称、长度、精度、符号和可空属性可能与源端不同。 |
兼容性要求 | 建议采用能完整保留原值的类型扩展,例如扩大整数范围、字符串容量或数值精度;具体转换仍需符合目标端的类型规则。 | |
高风险场景 | 缩小类型范围、缩短字符串长度、减少 Decimal 整数位或小数位,以及有符号/无符号、时间精度或时区、字符串与数值、整数与浮点之间的转换,可能造成数据截断、精度损失或写入失败;变更前需验证现有数据是否兼容。 | |
多源合表 | 目标字段类型需兼容所有源表的同名字段,最终类型可能与某一张源表的类型不同。 |
类别 | 项目 | 说明 |
|---|---|---|
约束 | 键与约束:新增、删除或替换主键 / 唯一键 | 不支持自动同步主键、唯一键的新增、删除、替换或组成字段变更。调整前需确认目标表结构、任务配置和已有数据的迁移方案。此处指键的定义变更,记录中主键值的数据更新不属于 Schema 变更。 |
表操作:删除表、清空表、表重命名 | 不支持自动同步删除表、清空表和表重命名操作。 | |
字段属性:单独修改字段注释、表注释 | 不支持单独修改字段注释或表注释的自动同步;已有目标表的注释需单独维护。 | |
字段属性:默认值定义 | 不支持通过建表、新增字段或字段修改自动同步默认值定义,也不支持自动同步 SET DEFAULT / DROP DEFAULT。需在目标端使用默认值时,请单独配置。源端已计算并写入记录的实际字段值仍正常同步;新增字段不会自动回填历史数据。 | |
字段属性:已有列的位置调整 | 不支持自动同步已有列的顺序调整;新增列的位置限制见第 3.2 节。 | |
其他对象:索引、外键、检查约束、分区规则、生成列、视图、触发器等 | 不支持自动同步这些对象的变更;执行不支持的 DDL 语法还可能导致同步中断,需在变更前验证任务兼容性。 |
约束 | 产品说明 |
|---|---|
无主键与乱序风险 | 源表没有主键且任务未配置有效唯一键时,并行同步或重试可能导致同一行的变更乱序,造成更新、删除结果与源端不一致。需要同步更新和删除时,应配置能够唯一标识记录的键,并确认目标端的写入方式支持相应操作。 |
转换模式 | 本条适用于转换模式:使用固定字段清单时,新增字段需手动加入同步范围;删除、重命名或修改字段类型时,需检查并调整引用该字段的映射、计算表达式和过滤条件。 |
多源合表 | 同名字段需保持可兼容类型,业务键需唯一;不同源的变更时间不一致时,目标结构不一定与任一源表完全相同。 |
Online DDL | 使用 gh-ost、pt-osc 等工具进行在线变更前,需确认工具及临时表命名、选表规则与任务兼容;自定义变更流程需提前验证。在线变更工具的切表支持仅适用于已适配流程。 |