Schema change synchronization support

Updated at:

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.

Note

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.

Note

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.

Note

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 sink.type-normalize-strategy.

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.

Note

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.

Note

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.

Note

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.