【问题标题】:Copy .parquet file with dates from S3 to Redshift将带有日期的 .parquet 文件从 S3 复制到 Redshift
【发布时间】:2020-01-03 00:12:12
【问题描述】:

我正在尝试使用 COPY 命令从 S3 将 .parquet 文件加载到我的 Redshift 数据库中。

该文件包含一个日期格式为 2018-10-28 的列。 Redshift 中表中的相关字段定义为日期。源 spark 数据框将该字段显示为 datetime64 并转换为 pandas 它是时间戳。

使用简单的COPY dates FROM s3://mybucket/file.parquet iam_role {xxxxx} FORMAT AS PARQUET 总是会返回不兼容的架构错误。

在我的 jupyter 笔记本中,我看不到完整的错误描述,但我猜它是日期字段,因为表的其余部分是一个简单的 varchar 字段和一些 int 字段

有没有办法查看完整的错误消息,因为它没有写入 stl_load_errors?

有没有比 yyyy-mm-dd 更好的源格式来将数据加载到 redshift 中?

【问题讨论】:

  • 尝试使用字符串而不是日期设置目标表
  • 是的,查询表svl_s3log。错误消息吐出pid。您可以按此过滤并在 message 列上找到错误。

标签: date copy amazon-redshift parquet


【解决方案1】:

Redshift 和 Parquet 格式在大多数情况下都无法相处。

你有几个选择,其中前两个是

  1. 使用 Glue 爬虫在 Glue 数据目录中创建表并将其从 Redshift 用作外部(频谱)表,您需要执行一次。您的 COPY 变为 INSERT。

  2. 将文件加载到表中,每列(或您的日期列)定义为 varchar,转换为第二遍。

如果 Redshift 中的数据不会发生变化,您可以将它们保存在 S3(成为数据湖)中,并使用上面的方法 1,您可以从 Redshift 中读取它。

我上周刚刚处理了一个用例,将 Parquet 格式的 S3 数据集引入 Redshift,并使用上述第一种方法并将数据保存在 S3 中。

如果您还有其他问题,请告诉我。我很乐意提供帮助。

【讨论】:

  • 嗨@demircioglu,你能详细说明一下(更像是一步一步)如何做第一件事吗?我迫切需要完成这一步。如果您现在正在阅读本文,请提供帮助。谢谢。
【解决方案2】:

类似的东西(未测试):

 COPY dates FROM s3://mybucket/file.parquet iam_role {xxxxx} DATEFORMAT yyyy-mm-dd FORMAT AS PARQUET

Redshift documentation

【讨论】:

  • 您的解决方案会产生此错误 - DATEFORMAT argument is not supported for PARQUET based COPY [SQL State=0A000]
猜你喜欢
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-25
  • 2018-07-18
  • 2019-02-11
相关资源
最近更新 更多