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