我在使用otter做多表数据的合并,100张表tb_table_0到tb_table_99的数据合并到另外一个数据库的tb_table_all表中,两个数据库的使用的schema一样。当我对这100个表增加了一个字段之后,otter挂起,日志中显示
2017-03-29 23:35:59.283 [pipelineId = 9,taskName = transformWorker] WARN c.a.o.s.a.i.setl.zookeeper.termin.WarningTerminProcess - nid:1[9:setl:com.alibaba.otter.node.etl.transform.exception.TransformException: no support ddl for [test.tb_table_1] to [test.tb_table_all] , sql :ALTER TABLE tb_table_1 ADD COLUMN REMARK VARCHAR(100) NULL com.alibaba.otter.node.etl.transform.exception.TransformException: no support ddl for [test.tb_table_2] to [test.tb_table_all] , sql :ALTER TABLE tb_table_2 ADD COLUMN REMARK VARCHAR(100) NULL
请问有什么方法能够解决这种修改表字段的问题么?
原提问者GitHub用户 xmas120654
当使用otter进行多表数据合并时,如果你对表增加了一个字段,otter会报错提示不支持DDL。这是因为otter的增量同步模式是基于表结构的,不支持动态修改表结构。
为了解决这个问题,可以考虑以下几种方法:
手动修改表结构:你可以手动在目标数据库的tb_table_all表中增加这个字段,以保持表结构一致。然后重新启动otter同步任务,让其继续进行数据合并。
使用其他工具:Otter并不支持动态修改表结构,但你可以考虑使用其他ETL工具,如DataX、Sqoop或自定义脚本来实现表结构的变更。
使用临时表进行数据迁移:你可以创建一个临时表tmp_table_all,在tmp_table_all上增加字段,然后将tb_table_0到tb_table_99的数据先导入到tmp_table_all表中。最后,再将tmp_table_all表重命名为tb_table_all,完成数据迁移。
无论采用哪种方法,使用前请确保数据已备份,并进行充分的测试和验证,以避免数据丢失或出现其他问题。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。