全部产品
Search
文档中心

实时计算Flink版:表结构变更同步支持

更新时间:Aug 06, 2026

CDC YAML Pipeline 作业通过 pipeline 级配置项 schema.change.behavior 控制表结构变更策略,取值包括 IGNORE、LENIENT、TRY_EVOLVE、EVOLVE 和 EXCEPTION。本文说明各 Sink 连接器在 LENIENT(默认)和 EVOLVE 两种模式下对不同表结构变更事件(Schema Change Event)的处理方式。图例:✓ 支持,✗ 不支持,— 不涉及。

Paimon Sink

变更事件

LENIENT

EVOLVE

说明

添加列

✓

✓

自动在结果表中添加对应列。

删除列

✓

✓

在结果表中删除该列。

重命名列

✓

✓

在结果表中将原有列重命名。

列类型变更

✓

✓

在结果表中变更对应列的数据类型。

NOT NULL 转 NULLABLE

✓

✓

Paimon 允许将列从 NOT NULL 放宽为 NULLABLE。

NULLABLE 转 NOT NULL

✗

✗

框架层和 Paimon 均禁止将 NULLABLE 约束收紧,该变更不会生成事件。

创建表

✓

✓

在目标端自动创建对应表。如表已存在会校验 Schema 兼容性。

删除表

✗

✗

LENIENT 下静默跳过;EVOLVE 下抛出异常导致作业失败。

清空表

✗

✗

LENIENT 下静默跳过;EVOLVE 下抛出异常导致作业失败。

修改列注释

✗

✗

源端对已有列的注释修改不会同步。创建表和添加列时携带的注释会被同步。

修改表注释

✗

✗

源端对表注释的修改不会同步。创建表时携带的表注释会被同步。

说明

Paimon Sink 具备列名大小写自动修正能力,当因大小写不匹配导致 Schema 变更失败时会自动重试。

Fluss Sink

变更事件

LENIENT

EVOLVE

说明

添加列

✓

✓

仅支持在末尾位置(LAST)添加列。

删除列

✗

✗

LENIENT 下静默跳过;EVOLVE 下抛出异常导致作业失败。

重命名列

✗

✗

LENIENT 下静默跳过;EVOLVE 下抛出异常导致作业失败。

列类型变更

✗

✗

LENIENT 下静默跳过;EVOLVE 下抛出异常导致作业失败。

NOT NULL 转 NULLABLE

✗

✗

列类型变更事件不支持,NULLABLE 变更也被静默跳过。

NULLABLE 转 NOT NULL

✗

✗

框架层禁止将 NULLABLE 约束收紧,该变更不会生成事件。

创建表

✓

✓

在目标端自动创建对应表和数据库。

删除表

✓

✓

在目标端删除该表。

清空表

✗

✗

LENIENT 下静默跳过;EVOLVE 下抛出异常导致作业失败。

修改列注释

✗

✗

源端对已有列的注释修改不会同步。创建表和添加列时携带的注释会被同步。

修改表注释

✗

✗

源端对表注释的修改不会同步。创建表时携带的表注释会被同步。

说明

建议使用 schema.change.behavior: LENIENT 模式来更灵活地处理 Fluss 不支持的 Schema 变更。

StarRocks Sink

变更事件

LENIENT

EVOLVE

说明

添加列

✓

✓

自动在结果表中添加对应列。

删除列

✓

✓

在结果表中删除该列。

重命名列

✗

✗

LENIENT 下静默跳过;EVOLVE 下抛出异常导致作业失败。

列类型变更

✗

✗

LENIENT 下静默跳过;EVOLVE 下抛出异常导致作业失败。

NOT NULL 转 NULLABLE

✗

✗

列类型变更事件不支持,NULLABLE 变更也被静默跳过。

NULLABLE 转 NOT NULL

✗

✗

框架层禁止将 NULLABLE 约束收紧,该变更不会生成事件。

创建表

✓

✓

在目标端自动创建对应表。

删除表

✓

✓

在目标端删除该表。

清空表

✓

✓

清空目标端表的数据。

修改列注释

✗

✗

源端对已有列的注释修改不会同步。创建表和添加列时携带的注释会被同步。

修改表注释

✗

✗

源端对表注释的修改不会同步。创建表时携带的表注释会被同步。

说明

StarRocks 3.3+ 版本计划支持 RENAME COLUMN 操作,当前版本暂不支持。

Iceberg Sink

变更事件

LENIENT

EVOLVE

说明

添加列

✓

✓

支持指定列的位置(FIRST/LAST/BEFORE/AFTER)。

删除列

✓

✓

在结果表中删除该列。

重命名列

✓

✓

在结果表中将原有列重命名。

列类型变更

✓

✓

在结果表中变更对应列的数据类型。

NOT NULL 转 NULLABLE

✗

✗

暂不支持。

NULLABLE 转 NOT NULL

✗

✗

框架层禁止将 NULLABLE 约束收紧,该变更不会生成事件。

创建表

✓

✓

在目标端自动创建对应表和命名空间。

删除表

✗

✗

LENIENT 下静默跳过;EVOLVE 下抛出异常导致作业失败。

清空表

✗

✗

LENIENT 下静默跳过;EVOLVE 下抛出异常导致作业失败。

修改列注释

✗

✗

源端对已有列的注释修改不会同步。创建表和添加列时携带的注释会被同步。

修改表注释

✗

✗

源端对表注释的修改不会同步。创建表时携带的表注释会被同步。

Hologres Sink

变更事件

LENIENT

EVOLVE

说明

添加可空列

✓

✓

自动在结果表 Schema 末尾添加对应列,并同步新增列的数据。

添加非空列

✓

✓

在结果表 Schema 末尾添加对应列,新增列默认设为可空列,添加列发生之前的数据自动置为 NULL。

删除列

✗

✗

Hologres 暂不支持删除列。LENIENT 下静默跳过;EVOLVE 下抛出异常导致作业失败。

重命名列

✓

✓

LENIENT 下作为添加列和删除列处理,末尾添加重命名后的列,原列数据自动填充 NULL;EVOLVE 下直接重命名。

列类型变更

✗

✗

Hologres 不支持列类型变更。LENIENT 下静默跳过;EVOLVE 下抛出异常导致作业失败。需搭配 sink.type-normalize-strategy 使用。

NOT NULL 转 NULLABLE

✗

✗

列类型变更事件不支持,NULLABLE 变更也被静默跳过。

NULLABLE 转 NOT NULL

✗

✗

框架层禁止将 NULLABLE 约束收紧,该变更不会生成事件。

删除表

✓

✓

在目标端删除该表。

清空表

✓

✓

清空目标端表的数据。

修改列注释

✗

✗

源端对已有列的注释修改不会同步。创建表和添加列时携带的注释会被同步。

修改表注释

✗

✗

源端对表注释的修改不会同步。创建表时携带的表注释会被同步。

说明

Hologres Sink 不支持 TRY_EVOLVE 策略。添加列时仅支持在末尾添加(LAST 位置),且不支持添加非 NULLABLE 列。同时不支持同步主键或索引等约束的变更、非空列的删除、以及 NOT NULL 转 NULLABLE 变更。

SelectDB Sink

变更事件

LENIENT

EVOLVE

说明

添加列

✓

✓

自动在结果表中添加对应列,并同步新增列的数据。

删除列

✓

✓

在结果表中删除该列。

重命名列

✓

✓

在结果表中将原有列重命名。

列类型变更

✓

✓

在结果表中变更对应列的数据类型。

NOT NULL 转 NULLABLE

✗

✗

MODIFY COLUMN 语句未显式指定 NULL,Doris 保持原有 NULLABLE 约束不变。

NULLABLE 转 NOT NULL

✗

✗

框架层禁止将 NULLABLE 约束收紧,该变更不会生成事件。

创建表

✓

✓

在目标端自动创建对应表。

删除表

✓

✓

在目标端删除该表。

清空表

✓

✓

清空目标端表的数据。

修改列注释

✗

✗

源端对已有列的注释修改不会同步。创建表和添加列时携带的注释会被同步。

修改表注释

✗

✗

源端对表注释的修改不会同步。创建表时携带的表注释会被同步。

说明

Batch 模式下(sink.enable-batch-mode: true),ALTER TABLE 类型的 Schema 变更(添加列、删除列、重命名列、列类型变更)会等待 Schema 变更完成后再继续处理数据,超时时间通过 schema.evolution.timeout 配置。SelectDB 底层基于 Apache Doris 引擎。

MaxCompute Sink

变更事件

LENIENT

EVOLVE

说明

添加列

✓

✓

自动在结果表中添加对应列。

删除列

✓

✓

在结果表中删除该列。

重命名列

✓

✓

在结果表中将原有列重命名。

列类型变更

✓

✓

在结果表中变更对应列的数据类型。

NOT NULL 转 NULLABLE

✓

✓

将列约束从 NOT NULL 放宽为 NULLABLE 会被同步到目标端。

NULLABLE 转 NOT NULL

✗

✗

框架层禁止将 NULLABLE 约束收紧,该变更不会生成事件。

创建表

✓

✓

在目标端自动创建对应表。表已存在时校验 Schema 和主键一致性,不一致则抛出异常。

删除表

✓

✓

在目标端删除该表。

清空表

✓

✓

清空目标端表的数据。

修改列注释

✗

✗

源端对已有列的注释修改不会同步。创建表和添加列时携带的注释会被同步。

修改表注释

✗

✗

源端对表注释的修改不会同步。创建表时携带的表注释会被同步。

Kafka Sink

变更事件

LENIENT

EVOLVE

说明

创建表

✓

✓

在 Kafka 中自动创建对应的 Topic(Upsert 模式下创建 Compacted Topic)。

添加列

—

—

Kafka 不维护 Schema,事件被静默忽略。

删除列

—

—

Kafka 不维护 Schema,事件被静默忽略。

重命名列

—

—

Kafka 不维护 Schema,事件被静默忽略。

列类型变更

—

—

Kafka 不维护 Schema,事件被静默忽略。

删除表

—

—

事件被静默忽略。

清空表

—

—

事件被静默忽略。

修改列注释

—

—

Kafka 不维护 Schema。

修改表注释

—

—

Kafka 不维护 Schema。

说明

Kafka 作为消息队列不维护表的 Schema 结构,Schema 变更事件会作为消息的一部分发送到下游,但不会在 Kafka 端执行实际的结构变更操作。