【问题标题】: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
  • 谢谢@IlyaKisil,问题是这个

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


【解决方案1】:

在此处找到解决方案:https://forums.aws.amazon.com/thread.jspa?threadID=302156

显然,DMS 迁移数据的默认时间戳与 Athena 如何映射此时间戳(毫秒/纳秒)之间存在不匹配。

“将 parquetTimestampInMillisecond=true 添加到目标端点的额外连接属性中修复了此问题” 然后再次运行 DMS 和 Crawler

【讨论】:

    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-25
      • 1970-01-01
      • 2019-05-22
      • 1970-01-01
      • 2019-10-27
      • 2014-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多