Redshift COPY 命令返回 stl_load_error 1205 无效的日期格式 - 长度必须为 10 或更多

Posted

技术标签:

【中文标题】Redshift COPY 命令返回 stl_load_error 1205 无效的日期格式 - 长度必须为 10 或更多【英文标题】:Redshift COPY command returns stl_load_error 1205 Invalid Date Format - length must be 10 or more 【发布时间】:2020-01-23 18:28:07 【问题描述】:

我正在将 .csv 文件从 S3 复制到 Redshift,Redshift COPY 命令返回

stl_load_error 1205 无效的日期格式 - 长度必须为 10 或更多。

我的日期都是 10 个字符长,默认格式为 'YYYY-MM-DD'。

命令:

COPY [table]
FROM [file location]
ACCESS_KEY_ID [___]
SECRET_ACCESS_KEY [____]
FORMAT AS CSV
IGNOREHEADER 1;

该表是使用以下方法创建的:

CREATE TABLE finance.commissions_life (
submitted_date date,
campaign varchar(40),
click_id varchar(40),
local_id varchar(40),
num_apps float);

.csv 也是这种格式。

还有其他人有类似的问题吗?

【问题讨论】:

嗨斯托达德,确实有类似的问题。我的方法是将数据加载到临时表中,使提交的日期变为 varchar(50)。加载后,我可以在将数据发送到最终表时控制格式。尝试将 submit_date 更改为 varchar(50) 并查看它是否有效。 【参考方案1】:

当我过去遇到这个错误时,我总是求助于明确定义要使用的分隔符和日期格式:

COPY db.schema.table
FROM 's3://bucket/folder/file.csv'
CREDENTIALS 'aws_access_key_id=[access_key];aws_secret_access_key=[secret_access_key]'
DELIMITER AS ','
DATEFORMAT 'YYYY-MM-DD'
IGNOREHEADER 1
;

如果您能够更改 S3 文件的结构/格式,您应该明确地将日期用引号括起来,并将其保存为制表符分隔的文本文件而不是 CSV。如果你能做到这一点,那么你的COPY 命令将是:

COPY db.schema.table
FROM 's3://bucket/folder/file.csv'
CREDENTIALS 'aws_access_key_id=[access_key];aws_secret_access_key=[secret_access_key]'
DELIMITER AS '\t' 
DATEFORMAT 'YYYY-MM-DD'
IGNOREHEADER 1
REMOVEQUOTES
;

此外,您应该能够查询系统表 stl_load_errors 以收集有关导致加载失败的确切行/文本的其他信息:

SELECT *
FROM stl_load_errors
ORDER BY starttime DESC
;

【讨论】:

【参考方案2】:

扩展@John 提供的答案,在复制命令中使用dateformat 'auto' 以获得更大的灵活性。另外,如果他的回答解决了问题,请将其标记为已接受,以便我们知道。 如果没有,您可以查询系统错误表以查看错误记录并编辑您的问题以发布“raw_line”或“raw_field_value”值吗?

【讨论】:

【参考方案3】:

问题是我上传的表有一个偏移列的索引。应该是十字符日期的列未与数据库表中的日期列对齐。

感谢您的帮助!

【讨论】:

以上是关于Redshift COPY 命令返回 stl_load_error 1205 无效的日期格式 - 长度必须为 10 或更多的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中如何捕获 Redshift 对 COPY 命令的响应?

从 lambda 中使用 redshift COPY 命令的权限

使用 COPY 命令将数据从 JSON 文件复制到 Redshift

Redshift COPY 自动压缩

Redshift COPY 命令与 AWS 数据管道 RedshiftCopyActivity

1214:使用 COPY 命令将数据从 csv 导入 Redshift 时 CSV 的报价格式无效