如何在Presto / Athena中处理TIMESTAMP_MICROS拼花地板字段

时间:2019-06-03 15:59:43

标签: amazon-web-services parquet presto amazon-athena aws-dms

当前,我们有一个DMS任务,该任务将获取MySQL DB的内容并将文件以拼花格式转储到S3。

实木复合地板中时间戳的格式最终为TIMESTAMP_MICROS。

这是Presto(雅典娜的基本实现)does not support timestamps in microsecond precision and makes the assumption that all timestamps are in millisecond precision.

的问题

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

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

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

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

有人曾经遇到过这个问题并找到了解决方案吗?

更改MySQL数据库的精度并不是真正的选择,因为许多客户端都在使用它,并且我们不希望冒险破坏接口。

我正在考虑创建一个可以在创建新镶木地板时运行的作业,以查找TIMESTAMP_MICRO字段并将其列为TIMESTAMP_MILLIS。不确定是否要执行此操作的最佳方法(胶水/火花作业?)

DMS非常棒,并且使转储到镶木地板非常简单,可能还有其他方法可以从MySQL提取数据。还有其他无需大量定制开发就可以做到这一点的工具吗?

1 个答案:

答案 0 :(得分:0)

使用目标端点,可以设置“额外的连接属性”。如果将parquetTimestampInMillisecond设置为true,则时间戳将以毫秒为单位。

Source