Schema change synchronization support
CDC YAML Pipeline jobs use the pipeline-level configuration schema.change.behavior to control the schema change strategy. Valid values are IGNORE, LENIENT, TRY_EVOLVE, EVOLVE, and EXCEPTION. This topic describes how each Sink connector handles different schema change events under the LENIENT (default) and EVOLVE modes. Legend: ✓ supported, ✗ not supported, — not applicable.
Paimon Sink
|
Change event |
LENIENT |
EVOLVE |
Description |
|
Add column |
✓ |
✓ |
The corresponding column is automatically added to the result table. |
|
Drop column |
✓ |
✓ |
The column is dropped from the result table. |
|
Rename column |
✓ |
✓ |
The column is renamed in the result table. |
|
Alter column type |
✓ |
✓ |
The data type of the corresponding column is changed in the result table. |
|
NOT NULL to NULLABLE |
✓ |
✓ |
Paimon allows relaxing a column from NOT NULL to NULLABLE. |
|
NULLABLE to NOT NULL |
✗ |
✗ |
Both the framework and Paimon prohibit tightening a NULLABLE constraint. No event is generated for such a change. |
|
Create table |
✓ |
✓ |
The corresponding table is automatically created on the target side. If the table already exists, schema compatibility is validated. |
|
Drop table |
✗ |
✗ |
Under LENIENT, the event is silently skipped. Under EVOLVE, an exception is thrown and the job fails. |
|
Truncate table |
✗ |
✗ |
Under LENIENT, the event is silently skipped. Under EVOLVE, an exception is thrown and the job fails. |
|
Alter column comment |
✗ |
✗ |
Changes to existing column comments on the source side are not synchronized. Comments included when a table is created or a column is added are synchronized. |
|
Alter table comment |
✗ |
✗ |
Changes to table comments on the source side are not synchronized. Table comments included when the table is created are synchronized. |
Paimon Sink automatically corrects column-name case: when a schema change fails due to case mismatch, it retries automatically.
Fluss Sink
|
Change event |
LENIENT |
EVOLVE |
Description |
|
Add column |
✓ |
✓ |
Only appending a column at the end (LAST position) is supported. |
|
Drop column |
✗ |
✗ |
Under LENIENT, the event is silently skipped. Under EVOLVE, an exception is thrown and the job fails. |
|
Rename column |
✗ |
✗ |
Under LENIENT, the event is silently skipped. Under EVOLVE, an exception is thrown and the job fails. |
|
Alter column type |
✗ |
✗ |
Under LENIENT, the event is silently skipped. Under EVOLVE, an exception is thrown and the job fails. |
|
NOT NULL to NULLABLE |
✗ |
✗ |
Alter-column-type events are not supported, and NULLABLE changes are also silently skipped. |
|
NULLABLE to NOT NULL |
✗ |
✗ |
The framework prohibits tightening a NULLABLE constraint. No event is generated for such a change. |
|
Create table |
✓ |
✓ |
The corresponding table and database are automatically created on the target side. |
|
Drop table |
✓ |
✓ |
The table is dropped on the target side. |
|
Truncate table |
✗ |
✗ |
Under LENIENT, the event is silently skipped. Under EVOLVE, an exception is thrown and the job fails. |
|
Alter column comment |
✗ |
✗ |
Changes to existing column comments on the source side are not synchronized. Comments included when a table is created or a column is added are synchronized. |
|
Alter table comment |
✗ |
✗ |
Changes to table comments on the source side are not synchronized. Table comments included when the table is created are synchronized. |
It is recommended to use the schema.change.behavior: LENIENT mode to handle schema changes not supported by Fluss more flexibly.
StarRocks Sink
|
Change event |
LENIENT |
EVOLVE |
Description |
|
Add column |
✓ |
✓ |
The corresponding column is automatically added to the result table. |
|
Drop column |
✓ |
✓ |
The column is dropped from the result table. |
|
Rename column |
✗ |
✗ |
Under LENIENT, the event is silently skipped. Under EVOLVE, an exception is thrown and the job fails. |
|
Alter column type |
✗ |
✗ |
Under LENIENT, the event is silently skipped. Under EVOLVE, an exception is thrown and the job fails. |
|
NOT NULL to NULLABLE |
✗ |
✗ |
Alter-column-type events are not supported, and NULLABLE changes are also silently skipped. |
|
NULLABLE to NOT NULL |
✗ |
✗ |
The framework prohibits tightening a NULLABLE constraint. No event is generated for such a change. |
|
Create table |
✓ |
✓ |
The corresponding table is automatically created on the target side. |
|
Drop table |
✓ |
✓ |
The table is dropped on the target side. |
|
Truncate table |
✓ |
✓ |
Data of the table on the target side is truncated. |
|
Alter column comment |
✗ |
✗ |
Changes to existing column comments on the source side are not synchronized. Comments included when a table is created or a column is added are synchronized. |
|
Alter table comment |
✗ |
✗ |
Changes to table comments on the source side are not synchronized. Table comments included when the table is created are synchronized. |
RENAME COLUMN is planned for StarRocks 3.3+; it is not supported in the current version.
Iceberg Sink
|
Change event |
LENIENT |
EVOLVE |
Description |
|
Add column |
✓ |
✓ |
The column position can be specified (FIRST/LAST/BEFORE/AFTER). |
|
Drop column |
✓ |
✓ |
The column is dropped from the result table. |
|
Rename column |
✓ |
✓ |
The column is renamed in the result table. |
|
Alter column type |
✓ |
✓ |
The data type of the corresponding column is changed in the result table. |
|
NOT NULL to NULLABLE |
✗ |
✗ |
Not supported. |
|
NULLABLE to NOT NULL |
✗ |
✗ |
The framework prohibits tightening a NULLABLE constraint. No event is generated for such a change. |
|
Create table |
✓ |
✓ |
The corresponding table and namespace are automatically created on the target side. |
|
Drop table |
✗ |
✗ |
Under LENIENT, the event is silently skipped. Under EVOLVE, an exception is thrown and the job fails. |
|
Truncate table |
✗ |
✗ |
Under LENIENT, the event is silently skipped. Under EVOLVE, an exception is thrown and the job fails. |
|
Alter column comment |
✗ |
✗ |
Changes to existing column comments on the source side are not synchronized. Comments included when a table is created or a column is added are synchronized. |
|
Alter table comment |
✗ |
✗ |
Changes to table comments on the source side are not synchronized. Table comments included when the table is created are synchronized. |
Hologres Sink
|
Change event |
LENIENT |
EVOLVE |
Description |
|
Add nullable column |
✓ |
✓ |
The corresponding column is automatically appended to the end of the result table schema, and data of the new column is synchronized. |
|
Add non-nullable column |
✓ |
✓ |
The corresponding column is appended to the end of the result table schema. The new column is nullable by default, and existing data before the add-column event is automatically set to NULL. |
|
Drop column |
✗ |
✗ |
Hologres does not currently support dropping columns. Under LENIENT, the event is silently skipped. Under EVOLVE, an exception is thrown and the job fails. |
|
Rename column |
✓ |
✓ |
Under LENIENT, this is handled as an add-column followed by a drop-column: the renamed column is added at the end, and existing data of the original column is automatically filled with NULL. Under EVOLVE, the column is renamed directly. |
|
Alter column type |
✗ |
✗ |
Hologres does not support alter-column-type. Under LENIENT, the event is silently skipped. Under EVOLVE, an exception is thrown and the job fails. This must be used together with |
|
NOT NULL to NULLABLE |
✗ |
✗ |
Alter-column-type events are not supported, and NULLABLE changes are also silently skipped. |
|
NULLABLE to NOT NULL |
✗ |
✗ |
The framework prohibits tightening a NULLABLE constraint. No event is generated for such a change. |
|
Drop table |
✓ |
✓ |
The table is dropped on the target side. |
|
Truncate table |
✓ |
✓ |
Data of the table on the target side is truncated. |
|
Alter column comment |
✗ |
✗ |
Changes to existing column comments on the source side are not synchronized. Comments included when a table is created or a column is added are synchronized. |
|
Alter table comment |
✗ |
✗ |
Changes to table comments on the source side are not synchronized. Table comments included when the table is created are synchronized. |
Hologres Sink does not support the TRY_EVOLVE strategy. When adding a column, only appending at the end (LAST position) is supported, and adding a non-NULLABLE column is not supported. It also does not synchronize changes to constraints such as primary keys or indexes, dropping non-null columns, or the NOT NULL to NULLABLE change.
SelectDB Sink
|
Change event |
LENIENT |
EVOLVE |
Description |
|
Add column |
✓ |
✓ |
The corresponding column is automatically added to the result table, and data of the new column is synchronized. |
|
Drop column |
✓ |
✓ |
The column is dropped from the result table. |
|
Rename column |
✓ |
✓ |
The column is renamed in the result table. |
|
Alter column type |
✓ |
✓ |
The data type of the corresponding column is changed in the result table. |
|
NOT NULL to NULLABLE |
✗ |
✗ |
When the MODIFY COLUMN statement does not explicitly specify NULL, Doris keeps the existing NULLABLE constraint unchanged. |
|
NULLABLE to NOT NULL |
✗ |
✗ |
The framework prohibits tightening a NULLABLE constraint. No event is generated for such a change. |
|
Create table |
✓ |
✓ |
The corresponding table is automatically created on the target side. |
|
Drop table |
✓ |
✓ |
The table is dropped on the target side. |
|
Truncate table |
✓ |
✓ |
Data of the table on the target side is truncated. |
|
Alter column comment |
✗ |
✗ |
Changes to existing column comments on the source side are not synchronized. Comments included when a table is created or a column is added are synchronized. |
|
Alter table comment |
✗ |
✗ |
Changes to table comments on the source side are not synchronized. Table comments included when the table is created are synchronized. |
In batch mode (sink.enable-batch-mode: true), ALTER TABLE-type schema changes (add column, drop column, rename column, alter column type) wait for the schema change to complete before data processing resumes. The timeout is configured through schema.evolution.timeout. SelectDB is built on the Apache Doris engine.
MaxCompute Sink
|
Change event |
LENIENT |
EVOLVE |
Description |
|
Add column |
✓ |
✓ |
The corresponding column is automatically added to the result table. |
|
Drop column |
✓ |
✓ |
The column is dropped from the result table. |
|
Rename column |
✓ |
✓ |
The column is renamed in the result table. |
|
Alter column type |
✓ |
✓ |
The data type of the corresponding column is changed in the result table. |
|
NOT NULL to NULLABLE |
✓ |
✓ |
Relaxing the column constraint from NOT NULL to NULLABLE is synchronized to the target side. |
|
NULLABLE to NOT NULL |
✗ |
✗ |
The framework prohibits tightening a NULLABLE constraint. No event is generated for such a change. |
|
Create table |
✓ |
✓ |
The corresponding table is automatically created on the target side. If the table already exists, schema and primary key consistency are validated; an exception is thrown when they are inconsistent. |
|
Drop table |
✓ |
✓ |
The table is dropped on the target side. |
|
Truncate table |
✓ |
✓ |
Data of the table on the target side is truncated. |
|
Alter column comment |
✗ |
✗ |
Changes to existing column comments on the source side are not synchronized. Comments included when a table is created or a column is added are synchronized. |
|
Alter table comment |
✗ |
✗ |
Changes to table comments on the source side are not synchronized. Table comments included when the table is created are synchronized. |
Kafka Sink
|
Change event |
LENIENT |
EVOLVE |
Description |
|
Create table |
✓ |
✓ |
The corresponding topic is automatically created in Kafka (a compacted topic is created in Upsert mode). |
|
Add column |
— |
— |
Kafka does not maintain a schema; the event is silently ignored. |
|
Drop column |
— |
— |
Kafka does not maintain a schema; the event is silently ignored. |
|
Rename column |
— |
— |
Kafka does not maintain a schema; the event is silently ignored. |
|
Alter column type |
— |
— |
Kafka does not maintain a schema; the event is silently ignored. |
|
Drop table |
— |
— |
The event is silently ignored. |
|
Truncate table |
— |
— |
The event is silently ignored. |
|
Alter column comment |
— |
— |
Kafka does not maintain a schema. |
|
Alter table comment |
— |
— |
Kafka does not maintain a schema. |
As a message queue, Kafka does not maintain a table schema. Schema change events are delivered downstream as part of the message payload, but no actual schema change operations are performed on the Kafka side.