AWS DMS - MYSQL 上的 CDC 作为源端点的微秒精度

Bla*_*ack 5 mysql database amazon-s3 amazon-web-services aws-dms

我使用 AWS DMS 从 MYSQL 作为源终端节点和 S3 作为目标终端节点迁移数据。
我想跟踪源更新,因此在配置过程中,我启用了TimestampColumnName属性(列名称:event_timestamp)。
在结果(如下所列)中,我获得了记录/事件的时间戳,但不是微秒精度。

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

在此输入图像描述

有人可以看一下并建议我是否缺少任何财产。
输出格式:对于我在 S3 中的文件来说,它是 parquet。

Ole*_*kin 6

不幸的是,AWS DMS S3 添加的TimestampColumnName用于从 MySQL 源加载更改数据捕获 (CDC) 的DATETIME 列将仅具有第二精度

因为MySQL二进制日志中的事务时间戳只有秒


最简单的解决方案是向 MySQL 表添加新列 -时间戳,精度为微秒,默认值在插入或/和更新时自动设置,并将该列用作event_timestamp.

ts TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
Run Code Online (Sandbox Code Playgroud)

另外,检查 AWS DMS 到 S3设置 ParquetTimestampInMillisecond是否为False(或不存在/未设置,默认为 false)。


AWS DMS S3TimestampColumnName设置将带有时间戳的列添加到输出中。

在“静态”读取中 - 它将生成当前时间戳:

对于完全加载,此时间戳列的每一行都包含 DMS 将数据从源传输到目标的时间戳。

对于 CDC,它将从数据库事务日志中读取事务时间:

对于更改数据捕获 (CDC) 加载,时间戳列的每一行都包含源数据库中该行的提交时间戳。

它的精度将是数据库事务日志中的时间戳之一:

...精度的舍入取决于 DMS 支持的源数据库的提交时间戳。

CDC模式本质上是复制。应适当配置源数据库以写入此类事务日志。数据库将事务信息以及事务/提交时间戳写入此日志。

对于 MySQL,这是二进制日志。而 MySQL binlog 时间戳只有 32 位——只是秒。


此外,该事务时间戳可能并不总是与事务的实际顺序一致,或者顺序更改实际上是在(链接 1链接 2)提交的。