AWS DMS:如何处理 Presto/Athena 中的 TIMESTAMP_MICROS 镶木地板字段

AWS DMS: How to handle TIMESTAMP_MICROS parquet fields in Presto/Athena

目前,我们有一个 DMS 任务,它将获取 MySQL 数据库的内容并将文件以 parquet 格式转储到 S3。

parquet 中时间戳的格式最终为 TIMESTAMP_MICROS。

这是一个问题,因为 Presto(Athena 的底层实现)does not support timestamps in microsecond precision and makes the assumption that all timestamps are in millisecond precision.

这不会直接导致任何错误,但它会使时间显示为某个极端的未来日期,因为它将微秒数解释为毫秒数。

我们目前正在解决这个问题,方法是在采用这些时间戳的 Athena 表之上创建 Athena 视图,将它们转换为 unix 时间戳(即数字),除以 1000 以转换为毫秒分辨率,然后再转换回来到时间戳。

这对于概念验证和识别问题来说很好,但这对我们不起作用,因为我们有很多表,其中有很多时间戳列,并且不想在顶部引入这个脆弱的视图层。

为 Athena 和 DMS 团队创建了支持工单,他们都确认了问题并在他们的末端创建了功能请求,为这个不兼容的问题创建本地解决方案,但支持工程师都无法提供内置的解决方法。 DMS 似乎不支持将列类型更改为毫秒精度或 varchar 字符串。对于 Athena,这只是记录在案的 Presto 限制。

有没有人运行以前遇到过这个问题并找到了解决方案?

更改 MySQL 数据库中的精度并不是一个真正的选择,因为许多客户都在使用它,我们不想冒破坏界面的风险。

我正在考虑创建一个作业,该作业将 运行 在创建新镶木地板时随时查找 TIMESTAMP_MICRO 字段并将它们列为 TIMESTAMP_MILLIS。不太确定解决此问题的最佳方法(Glue/Spark 工作?)

DMS 很棒,它使转储到 parquet 变得超级简单,可能还有其他方法可以从 MySQL 中提取数据。有没有其他工具可以在没有太多定制开发的情况下做到这一点?

有了目标端点,可以设置"Extra Connection Attributes"。如果将 parquetTimestampInMillisecond 设置为 true,时间戳将以毫秒为单位。

Source