【问题标题】:Running a COPY command to load gzip-ed data to Redshift in S3在 S3 中运行 COPY 命令以将 gzip-ed 数据加载到 Redshift
【发布时间】:2015-01-12 11:50:01
【问题描述】:

当我运行复制命令将所有文件从 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 文档中没有明确指定,如果您只指定文件夹名称,则复制命令可以加载该文件夹的全部内容,但是我确实收到了错误。

有没有人遇到过类似的问题?这种操作需要文件前缀吗?

【问题讨论】:

  • 存储桶 s3://bucket_name/folder_name/ 中是否还有其他文件(不是 gzip)?
  • 不,该文件夹仅包含 gzip 文件
  • 你可以试试 s3cmd ls s3://bucket_name/folder_name 吗?或使用 aws s3 cli
  • 致未来的读者:OP 在使用前缀时没有出错的原因是跳过了错误文件。这是使用前缀的“功能”,无论它是否匹配多个文件的单个文件。我不喜欢它,因为它默默地隐藏了失败。使用清单加载批量文件更加“稳健”。

标签: amazon-web-services amazon-s3 amazon-redshift


【解决方案1】:

您的一个 gzip 文件格式不正确。 GZip 在文件末尾包含压缩“字典”,没有它就无法展开。

如果文件没有被完全写入,例如,您的磁盘空间不足,那么您会在尝试将其加载到 Redshift 时收到错误消息。

经验之谈……;-)

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,在我的情况下,gzip 文件是正确的,就像使用具有确切文件名的复制命令时一样,它工作正常。

    问题主要是因为应用程序“S3 Browser”。当您使用它创建目录时,它会在其中创建一些额外的隐藏文件。而当copy命令试图读取目录中的文件时,它会读取那些隐藏的无效gzip文件并抛出错误。

    【讨论】:

      【解决方案3】:

      对我来说,问题在于清单文件中写入了原始未加载的 gz 文件路径。 您可以删除清单文件,COPY 命令将从您在命令本身中指定的路径成功读取 gzip 文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-22
        • 2015-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-28
        • 1970-01-01
        相关资源
        最近更新 更多