mysql - AWS DMS - MYSQL 上的 CDC 作为源端点的微秒精度
问题描述
我正在使用 AWS DMS 从 MYSQL 作为源端点迁移数据,并将 S3 作为目标端点。
我想从源跟踪更新,所以在配置过程中,我启用了TimestampColumnName属性(列名:event_timestamp)。
在结果(如下所列)中,我得到了记录/事件的时间戳,但没有微秒精度。
我希望微秒级的精度在此之上构建序列逻辑。
我已经调查了源端点和目标的属性,但没有得到想要的结果。这是示例输出:
有人可以看看并建议我是否缺少任何财产。
输出格式:我在 S3 中的文件是镶木地板。
解决方案
这个问题已经有一年多了,但我遇到了同样/类似的问题,我想我会解释我是如何解决它的,以防它可以帮助其他人。
我在 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 中执行相同的操作。我注意到,当记录按时间戳列排序时,即使时间戳相同,它们也会保持原始顺序。
希望这可以潜在地帮助您解决您要实现的顺序逻辑。
推荐阅读
- mongodb - 如何在 Object 类型的字段中查询(查找)?
- google-cloud-bigtable - 谷歌 bigtable 或任何谷歌产品的时间序列数据模式设计
- deep-learning - Jetson nano 上 TensorRt 模型(pytorch->onnx->TensorRT)的准确性降低
- excel - 当前用户 Active Directory 组列表
- asp.net - 使用 Visual Studio 和 Asp.Net Core 的 Dockerfile 错误
- javascript - Nativescript Angular TabStrip可见性设置为折叠仍然占用空间
- typo3 - 制作介绍包在线typo3 9.5.14
- c++ - 如何避免基类中的多态调用
- r - Ranger 预测数据框中每一行的类别概率
- appium - Appium 测试脚本错误:找不到“adb.exe”