stl_load_errors返回无效的时间戳格式,我不知道

时间:2018-10-06 01:28:22

标签: postgresql amazon-web-services type-conversion amazon-redshift

我正在尝试使用copy函数在Redshift中创建表。我已经将这个特定字段设置为标准timestamp,但在我的架构中始终失败,因为我不知道为什么会出现其他情况。但是当我运行以下语句时:

copy sample_table
from 's3://aws-bucket/data_push_2018-10-05.txt'
                       credentials 'aws_access_key_id=XXXXXXXXXXXXXXXXXXXX;aws_secret_access_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/XXX'
                       dateformat 'auto'
                       ignoreheader 1; 

它不断返回此错误:Invalid timestamp format or value [YYYY-MM-DD HH24:MI:SS]

raw_field_value"2018-08-29 15:04:52"

raw_line12039752|311525|"67daf211abbe11e8b0010a28385dd2bc"|98953|"2018-08-20"|"2018-11-30"|"active"|"risk"|||||||"sample"|15750|0|"2018-08-29 15:04:52"|"2018-08-29 16:05:01"

我们的数据库中有一个非常相似的表(我没有制作过),该表具有上述错误值timestamp,并且该字段的值与2018-08-29 15:04:52相同,所以运行它时发生了什么是造成问题的原因吗?

1 个答案:

答案 0 :(得分:1)

您的复制命令似乎还可以,并且好像您缺少FORMAT as CSV QUOTE AS '"'DELIMITER AS '|'参数,它应该可以工作。

我在这里使用一些示例数据和命令来证明我的情况,为了简化起见,我确实简化了表并覆盖了所有数据点。

create table sample_table(
    salesid integer not null,
    category varchar(100),
    created_at timestamp,
    update_at timestamp );

此处是示例数据test_file.csv

12039752|"67daf211abbe11e8b0010a28385dd2bc"|"2018-08-29 11:04:52"|"2018-08-29 14:05:01"
12039754|"67daf211abbe11e8b0010a2838cccddbc"|"2018-08-29 15:04:52"|"2018-08-29 16:05:01"
12039755|"67daf211abbe11e8b0010a28385ff2bc"|"2018-08-29 12:04:52"|"2018-08-29 13:05:01"
12039756|"67daf211abbe11e8b0010a28385bb2bc |"2018-08-29 10:04:52"|"2018-08-29 15:05:01"

在这里执行复制命令,

COPY sample_table FROM 's3://path/to/csv/test_file.csv'  CREDENTIALS 'aws_access_key_id=XXXXXXXXXXX;aws_secret_access_key=XXXXXXXXX'   FORMAT as CSV  QUOTE AS '"'  DELIMITER AS '|';

它将返回,

INFO:  Load into table 'sample_table' completed, 4 record(s) loaded successfully.
COPY

尽管此命令可以正常工作,但是如果您的数据有更多问题,您也可以尝试使用MAXERROR选项。

希望它能回答您的问题。