我正在尝试使用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_line
:12039752|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
相同,所以运行它时发生了什么是造成问题的原因吗?
答案 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
选项。
希望它能回答您的问题。