【问题标题】:Why do I get wrong timestamp when using DMS to migrate from RDS to s3 in parquet format?为什么我在使用 DMS 以 parquet 格式从 RDS 迁移到 s3 时得到错误的时间戳?
【发布时间】:2019-11-14 17:46:53
【问题描述】:
我正在使用 AWS DMS 以 parquet 格式将数据从 MySQL RDS 迁移到 S3。
之后我运行一个 GLUE 爬虫,创建一个数据库和一个表。
一切正常,但时间戳。
例如,在 AWS Athena 查询中,我得到的结果是:+51218-09-22 03:06:40.000,而实际值为 2019-04-01-14.27.04 -0300。如您所见,日期完全错误。所有其他类型的迁移都很好
有人遇到过这个问题吗?
【问题讨论】:
-
我认为,您遇到了与今天早些时候this post 中所述类似的问题。您的时间戳的精度是多少?是微秒吗?另请参阅上述帖子中的 cmets
-
标签:
amazon-web-services
parquet
amazon-athena
aws-dms
【解决方案2】:
TL;DR:除以 1000 和 CAST 以从 Parquet v2 转换为 Parquet v1 格式
SELECT id,
CAST("from_unixtime"(CAST(("to_unixtime"("created_at") / 1000) AS bigint)) AS timestamp) "created_at",
FROM <YOUR_ATHENA_TABLE>
日期/时间戳问题源于 Athena 的预期内容与 S3 parquet 文件(由 RDS 快照导出或 DMS 创建)中提供的内容不兼容。
Athena 需要 Parquet V1 文件,而 RDS 以 Parquet V2 格式导出。 Parquet V1 时间戳为 INT96,而 V2 为 INT64。因此问题。我花了一段时间才弄明白,但功劳归him。