在实时集成作业中,作业运行异常报错信息包含关键字“Ddl type 'ALTER_COLUMN_TYPE' is configured with policy 'EXCEPTION”怎么办?
问题描述
在实时集成任务中,源端表进行了修改列DDL变更,作业运行异常,报错关键字“Ddl type 'ALTER_COLUMN_TYPE' is configured with policy 'EXCEPTION'”。
报错信息详情:
Caused by: org.apache.inlong.sort.protocol.ddl.exception.DdlHandleException: migration.10000400: Encountered a DDL error, please resolve the DDL manually. Error stack:
Ddl type 'ALTER_COLUMN_TYPE' is configured with policy 'EXCEPTION'
. DDL sql: alter table llch96.rds_source_tbl_961 modify col_float varchar(20) default null comment 'float to varchar'
at org.apache.inlong.sort.protocol.ddl.utils.DdlPolicyUtils.processWithDdlPolicy(DdlPolicyUtils.java:34) ~[blob_p-b7cce999877870001e778eb40e09ff21b660374d-4926c44a980abda9eb01b290112cec9b:?]
... 17 more
2025-07-28 18:01:52,457 WARN org.apache.flink.runtime.taskmanager.Task [] - Call stack:
at java.lang.Thread.getStackTrace(Thread.java:1564)
at org.apache.flink.runtime.taskmanager.Task.transitionState(Task.java:1139)
at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:801)
at org.apache.flink.runtime.taskmanager.Task.run(Task.java:573)
at java.lang.Thread.run(Thread.java:750)
原因分析
Hudi仅支持新增字段的DDL同步,其他类型的DDL变更将被默认忽略或导致作业失败。用户需要停止作业,并通过Spark SQL来完成Hudi表的相应变更。
解决方案
用户需要手动完字段类型的变更,步骤如下:
- 参考如何查看实时作业已消费位点并恢复作业?确认当前作业的同步位点并记录。
- 停止作业,参考MRS官网文档在Spark SQL中开启Hudi Schema演进能力,完成Hudi字段类型变更。
- 在作业配置界面,查看DDL配置,通过下拉框将“修改列类型”设置为“忽略”,或在Hudi表属性配置中添加“sink.ddl.alter.column.type.policy = ignore”,以在实时作业中忽略源端下发的列修改DDL语句。
- 完成DDL配置后提交作业,根据第1步中记录的消费位点启动作业。注意,为避免数据丢失,启动时间可早于记录的位点几分钟。
- 作业运行稳定后,可将“修改列类型”配置重置为“报错”,以便感知下一次的源端类型变更操作。