通过DMS AWS服务将数据从RDS Postgres数据库迁移到S3

3
我正在通过DMS AWS服务将数据从RDS Postgres数据库迁移到S3,任务类型是全量加载和CDC(增量变更)。
假设现在我有一个名为employee的postgres表中的一些数据。例如: | emp_id | emp_name | |--------|----------| | 1 | John | | 2 | Angel |
当任务最初创建时,会进行全量加载,并在s3目标位置创建LOAD00000____.parquet文件。 现在我正在向表中插入另一行: | emp_id | emp_name | |--------|----------| | 3 | Ram |
现在发生了CDC操作,并创建了一个日期文件夹(20220101 /),其中包含一个parquet文件。
实际上,我想尽管在重新加载表后发生截断/删除操作,仍要保留目标中的表。
"ChangeProcessingDdlHandlingPolicy": {
  "HandleSourceTableDropped": false,
  "HandleSourceTableTruncated": false,
  "HandleSourceTableAltered": false
}

我在任务设置中有这些配置。期望在我截断/删除postgresql表并重新加载后,目标数据不应分别被截断/删除。然而,无论我在HandleSourceTableDroppedHandleSourceTableTruncated的配置键中给出的值是什么,目标文件夹都会被删除。
我的task_setting.json文件也有:
"TargetTablePrepMode": "TRUNCATE_BEFORE_LOAD",

问题:

  1. 为什么在重新加载时S3文件夹会被删除?而且无论我为ChangeProcessingDdlHandlingPolicy中的键提供哪些值(True / False)。
  2. ChangeProcessingDdlHandlingPolicy 这个配置对象是什么意思?
1个回答

0
根据我对此的最佳理解,首先回答您的问题——
所以设置ChangeProcessingDdlHandlingPolicy与DDL有关,这在大多数情况下是针对目标数据库实例的情况。更多相关信息请点击这里
由于在您的情况下,目标是s3,因此这些设置并不重要,将被忽略。
现在,如果你想让你的目标文件夹在重新加载时不受影响,你可以尝试使用"TargetTablePrepMode": "Do Nothing"(如果语法正确的话)。
但是,无论如何,当您重新加载(即重启任务)时,目标上的数据都将被覆盖。虽然如果您希望保留数据迁移,并且从上一次停止的点开始恢复任务,则可以恢复任务。 enter image description here

关于此,请点击这里


在s3文件夹中,我将数据存储在parquet文件中。当源中执行alter命令时,这会反映在parquet文件中。所以,你是说仅删除/截断在这里不起作用?我的理解正确吗? - Nandini Raja
由于ALTER是DDL操作,这会更改源表/数据库的模式。现在您的目标是S3,您的期望可能是在源发生更改后立即将这些模式更改应用于您的Parquet。由于每个Parquet都有自己的模式,并且只要您不使用Glue数据目录(即在文件夹上运行爬虫并创建元数据和表),就没有中央模式,因此在S3内部的模式上不会直接进行更改。因此,无论何时出现模式更改,您都需要覆盖S3目标中的所有内容...继续。 - Mradul Yd
现在,由于在您的情况下,我认为这是一个完整加载+持续复制任务,当任务停止/失败或源中有更改时,您希望从上次离开的地方开始,或者重新加载。因此,在这里不建议做任何操作。但是,您可能需要使用较小的数据集尝试所有3个设置,并使用“完整加载后停止”设置来检查每个设置应用时实际发生的情况。然而,在我看来,只有在预先创建了模式并将parquet文件存储在s3内而爬虫检测到它时,才会出现这种情况。 - Mradul Yd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接