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

Sto*_*tod 3 sql copy amazon-redshift

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

  • stl_加载错误1205
  • 日期格式无效 - 长度必须为 10 或更大。

我的日期都是 10 个字符长,并且采用默认的“YYYY-MM-DD”格式。

命令:

COPY [table]
FROM [file location]
ACCESS_KEY_ID [___]
SECRET_ACCESS_KEY [____]
FORMAT AS CSV
IGNOREHEADER 1;
Run Code Online (Sandbox Code Playgroud)

该表是使用以下命令创建的:

CREATE TABLE finance.commissions_life (
submitted_date date,
campaign varchar(40),
click_id varchar(40),
local_id varchar(40),
num_apps float);
Run Code Online (Sandbox Code Playgroud)

.csv 也采用同样的格式。

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

Joh*_*ark 7

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

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
;
Run Code Online (Sandbox Code Playgroud)

如果您能够更改 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
;
Run Code Online (Sandbox Code Playgroud)

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

SELECT *
FROM stl_load_errors
ORDER BY starttime DESC
;
Run Code Online (Sandbox Code Playgroud)


小智 5

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