我正在尝试使用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更好的源格式来加载数据以进行红移?
答案 0 :(得分:0)
Redshift和镶木地板格式在大多数情况下都不受欢迎。
您有几个选择,其中前两个是
使用Glue搜寻器在Glue数据目录中创建表,并将其从Redshift用作外部(频谱)表,您需要执行一次。您的COPY成为INSERT。
将文件加载到表中,并将每列(或您的日期列)定义为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