Redshift COPY 命令写入主体失败(0 != 575)原因:无法膨胀无效或不完整的收缩数据

Redshift COPY command Failed writing body (0 != 575) Cause: Failed to inflateinvalid or incomplete deflate data

我在 S3 上有一个名为 data.csv.gz 的文件,它是一个压缩的 CSV 文件。我已经使用 ungzip 命令成功解压缩了它,所以据我所知我知道它已正确压缩。

运行下面的命令报错

COPY to_table ("id", "something", "something_else")
FROM 's3://my.domain.com/somewhere/data.csv.gz'
CREDENTIALS 'aws_access_key_id=********;aws_secret_access_key=********'
IGNOREHEADER 1 TRUNCATECOLUMNS CSV REGION 'us-east-1' GZIP;

错误是:

-----------------------------------------------
error:  Failed writing body (0 != 575) Cause: Failed to inflateinvalid or incomplete deflate data. zlib error code: -3
code:      9001
context:   S3 key being read : ...
...
-----------------------------------------------

这是什么意思,如何解决?

该文件是 SSE-S3 加密的,如果这很重要 - 据我所知,它不应该。

当您在复制过程中使用 gzip 选项但无法将文件读取为 gzip 时,会发生这种情况。

我遇到了同样的问题,我删除了 s3 中的现有文件夹并重新运行 卸载脚本然后复制脚本。

在我的例子中,gz 文件是完整的。这是一个合法的 gzip 文件。我使用 file -igzip -v -t cmds.

仔细检查了它

我什至解压缩了文件,重新压缩并上传到 s3。但仍然有同样的错误。

然后我发现这个 gz 文件的最后一行“损坏”了。它不知何故被切成两半,我不得不删除这一行,重新压缩,然后上传到 s3。 之后一切正常

然而神秘的是,如果一行像这样被切成两半,我们应该得到 stl_load_errors ¯\_(ツ)_/¯ 我唯一的猜测是我们的原始 gzip 文件仍然损坏但无法使用这 2 个命令检测到,我仍然能够解压缩它。