首页 > 解决方案 > AWS DMS - MYSQL 上的 CDC 作为源端点的微秒精度

问题描述

我正在使用 AWS DMS 从 MYSQL 作为源端点迁移数据,并将 S3 作为目标端点。
我想从源跟踪更新,所以在配置过程中,我启用了TimestampColumnName属性(列名:event_timestamp)。
在结果(如下所列)中,我得到了记录/事件的时间戳,但没有微秒精度。

我希望微秒级的精度在此之上构建序列逻辑。
我已经调查了源端点和目标的属性,但没有得到想要的结果。这是示例输出:

在此处输入图像描述.

有人可以看看并建议我是否缺少任何财产。
输出格式:我在 S3 中的文件是镶木地板。

标签: mysqldatabaseamazon-web-servicesamazon-s3aws-dms

解决方案


这个问题已经有一年多了,但我遇到了同样/类似的问题,我想我会解释我是如何解决它的,以防它可以帮助其他人。

我在 RDS 中有表,并且正在使用 DMS 将它们从 RDS 迁移到 S3。在 DMS 任务设置中,我启用了时间戳列和 parquet 文件格式。我想使用存储在 S3 中的 CDC 文件将其插入到我的数据湖中。因此,为了做到这一点,我需要通过获取对 RDS 表中特定记录的最新操作来对行进行重复数据删除。但就像您面临的问题一样,我注意到时间戳列的精度不高,因此选择具有最大时间戳的行不起作用,因为它会返回多行。所以我添加了一个新的 row_number 列,按时间戳列排序,按 id 分组,并选择 MAX(row_number)。这给了我应用到我的表的 CDC 行的最新操作。

table.withColumn("row_number", row_number().over(Window.partitionBy("table_id").orderBy("dms_timestamp")))

以上是 pyspark 代码,因为这就是我用来处理镶木地板文件的框架,但您可以在 SQL 中执行相同的操作。我注意到,当记录按时间戳列排序时,即使时间戳相同,它们也会保持原始顺序。

希望这可以潜在地帮助您解决您要实现的顺序逻辑。


推荐阅读