当我运行我的复制命令将所有文件从S3文件夹复制到Redshift表时,它失败并带有 "ERROR: gzip: unexpected end of stream. Unknown zlib error code. zlib error code: -1"
:
copy table_name
(column_list)
from 's3://bucket_name/folder_name/'
credentials 'aws_access_key_id=xxxxxx;aws_secret_access_key=xxxxxxxxx'
delimiter '|' GZIP
但是,当我为文件夹中的每个文件指定文件前缀时,它会成功:
copy table_name
(column_list)
from 's3://bucket_name/folder_name/file_prefix'
credentials 'aws_access_key_id=xxxxxx;aws_secret_access_key=xxxxxxxxx'
delimiter '|' GZIP
这些文件是GZIP编辑的。
在AWS文档中没有明确指出,如果你只是指定了folder_name,那么copy命令可以加载该文件夹的全部内容,但是我确实收到了错误。
有没有人遇到过类似的问题?这种操作需要文件前缀吗?
答案 0 :(得分:5)
您的一个gzip压缩文件格式不正确。 GZip包含文件末尾的压缩“字典”,没有它就无法扩展。
如果文件没有完全写入,例如,磁盘空间不足,那么当您尝试将其加载到Redshift中时,会看到错误。
从经验谈起......; - )
答案 1 :(得分:2)
我遇到了同样的问题,在我的情况下,gzip文件是正确的,因为当使用具有确切文件名的复制命令时,它工作正常。
问题主要是因为应用程序" S3浏览器"。使用它创建目录时,它会在其中创建一些额外的隐藏文件。当copy命令尝试读取目录中的文件时,它会读取那些隐藏的无效gzip文件并抛出错误。
答案 2 :(得分:0)
对我来说,问题是清单文件中写入了原始的卸载gz文件路径。 您可以删除清单文件,而COPY命令将从您在命令本身中指定的路径中成功读取gzip文件。