将日期为S3的.parquet文件复制到Redshift

时间:2019-08-29 17:04:36

标签: date copy amazon-redshift parquet

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

文件包含一列日期为2018-10-28的日期。 Redshift表中的相关字段定义为日期。源spark数据帧将字段显示为datetime64,并转换为时间戳记的熊猫。

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

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

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

是否有比yyyy-mm-dd更好的源格式来加载数据以进行红移?

2 个答案:

答案 0 :(得分:0)

Redshift和镶木地板格式在大多数情况下都不受欢迎。

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

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

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

如果Redshift中的数据不会改变,则可以将其保留在S3中(成为数据湖),使用上述方法1可以从Redshift中读取数据。

上周我有一个用例,将镶木地板格式的S3数据集带到Redshift,并使用了上面的第一种方法,并将数据保留在S3中。

让我知道您是否还有其他问题。我很乐意提供帮助。

答案 1 :(得分:0)

类似的东西(未经测试):

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

Redshift documentation