来自 S3 的 Redshift 复制命令有效,但没有上传数据

Posted

技术标签:

【中文标题】来自 S3 的 Redshift 复制命令有效,但没有上传数据【英文标题】:Redshift copy command from S3 works, but no data uploaded 【发布时间】:2015-01-07 22:56:47 【问题描述】:

我正在使用复制命令将文件 (.csv.gz) 从 AWS S3 复制到 Redshift

从 's3://[编辑].csv.gz' 凭证“[已编辑]” COMPUPDATE ON 分隔符',' 压缩包 忽略标题 1 删除引号 最大误差 30 空'空' 时间格式 'YYYY-MM-DD HH:MI:SS' ;

我没有收到任何错误,只是“成功加载 0 行”。我检查了简单的事情:仔细检查了文件的内容,确保我使用复制命令瞄准了正确的文件。然后我创建了一个简单的单行示例文件进行尝试,但没有成功。我一直在使用很久以前制作的复制命令模板,并且最近才有效。

我可能忽略了哪些常见错误?除了示例文件之外,我可以尝试任何其他方式吗?

谢谢。

【问题讨论】:

【参考方案1】:

使用IGNOREHEADER 1 选项,Redshift 会将第一行视为标题并跳过它。如果文件中只有一行,则应取消此选项。

如果您的文件包含多条记录,您可能会遇到数据加载错误。由于您指定了MAXERROR 30,Redshift 将跳过最多 30 条记录的无效记录并返回成功结果。复制期间的加载错误信息将存储在 STL_LOAD_ERRORS 表中。尝试SELECT * FROM STL_LOAD_ERRORS order by starttime desc limit 10; 来检查您是否有加载错误。

【讨论】:

谢谢!我没有想到 ignoreheader 问题。现在这些例子奏效了。很棒的收获。这使我转向其他可能性。最后,我刚刚删除了标题行并且它起作用了。我不知道为什么!我通常有 headers 和 ignoreheader 工作没有任何问题。 我应该检查一下 stl_load_errors。每当我过去遇到错误时,如果它们没有超过 30 的阈值,表格仍然会加载。出于某种原因,它试图用列类型验证标题行。所以基本上,我得到的是字符串类型!= int 类型。

以上是关于来自 S3 的 Redshift 复制命令有效,但没有上传数据的主要内容,如果未能解决你的问题,请参考以下文章

来自 S3 的 AWS Redshift COPY csv

从 S3 接入点复制到 Redshift

如何使用从 s3 到 redshift db 的复制命令解决语法错误

来自空 S3 分区的 Redshift COPY

Node-Redshift 是不是支持复制命令(查询)将数据从 S3 加载到 Redshift?

Redshift:从 s3 复制命令 Json 数据