You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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目标文件夹都会被删除。

问题

  1. 为何重新加载时S3文件夹会被删除,不受ChangeProcessingDdlHandlingPolicy参数值影响?
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:31:06