使用AWS DMS从RDS Postgres迁移至S3的配置异常问题咨询
AWS DMS 迁移S3时重新加载删除目标文件夹问题解析
问题背景
使用AWS DMS将RDS Postgres数据库以「全量加载+CDC」模式迁移至S3:
- 初始全量加载完成后,S3目标生成
LOAD00000____.parquet格式文件 - CDC阶段插入新数据时,会生成日期格式文件夹(如
20220101/)及对应Parquet文件
为实现PostgreSQL执行truncate/drop操作后重新加载时保留S3目标数据,配置了以下参数:
"ChangeProcessingDdlHandlingPolicy": { "HandleSourceTableDropped": false, "HandleSourceTableTruncated": false, "HandleSourceTableAltered": false }
同时task_setting.json中包含:
"TargetTablePrepMode": "TRUNCATE_BEFORE_LOAD"
实际测试中,无论HandleSourceTableDropped和HandleSourceTableTruncated设为true还是false,重新加载时S3目标文件夹都会被删除。
问题
- 为何重新加载时S3文件夹会被删除,不受
ChangeProcessingDdlHandlingPolicy参数值影响? ChangeProcessingDdlHandlingPolicy配置对象的具体含义是什么?
解答
问题1:重新加载删除S3文件夹的原因
ChangeProcessingDdlHandlingPolicy仅作用于CDC阶段的源库DDL操作处理,而你遇到的文件夹删除是全量重新加载阶段的行为,由TargetTablePrepMode参数控制:
- 当
TargetTablePrepMode设为TRUNCATE_BEFORE_LOAD时,DMS在启动全量加载前会执行目标预处理操作。对于S3目标,"truncate"逻辑等价于删除对应表的整个目标文件夹,这一流程和CDC阶段的ChangeProcessingDdlHandlingPolicy配置完全无关,因此无论后者如何设置,全量加载前的清理都会触发。
若要保留S3原有数据,需将TargetTablePrepMode修改为DO_NOTHING,此时全量加载前不会清理目标路径,新的全量数据会以新的LOAD文件写入,原有CDC数据和旧全量数据均会保留。
问题2:ChangeProcessingDdlHandlingPolicy的具体含义
该配置是AWS DMS专门用于CDC数据处理阶段的DDL操作规则,三个参数分别对应不同源库DDL事件的处理逻辑:
HandleSourceTableDropped:设为true时,源库执行DROP TABLE操作后,DMS会删除S3目标中对应表的文件夹;设为false则不执行删除,保留目标数据。HandleSourceTableTruncated:设为true时,源库执行TRUNCATE TABLE操作后,DMS会清理S3目标中对应表的数据(通常是删除文件夹);设为false则忽略该DDL事件,不修改目标数据。HandleSourceTableAltered:设为true时,源库执行ALTER TABLE操作后,DMS会自动适配目标端结构(针对S3这类无Schema目标,通常会生成新的分区或文件适配新字段);设为false则忽略alter操作,继续按原结构处理后续CDC数据。
注意:此配置仅对CDC阶段的DDL事件生效,不影响全量加载阶段的预处理逻辑。
内容的提问来源于stack exchange,提问作者Nandini Raja
相关产品推荐
相关产品推荐

