我必须从s3导入redshift中的csv文件。 表中的一列是JSON格式。
使用COPY命令时,出现以下错误 -
Invalid timestamp format or value [YYYY-MM-DD HH24:MI:SS]
使用的命令是 -
COPY api_log FROM 's3://X/Y' credentials 'aws_access_key_id=;aws_secret_access_key=' delimiter ',' maxerror as 250 TRUNCATECOLUMNS;
COMMIT;
样本数据是 -
c1 c2 c3
X Y {a:b,c:d}
答案 0 :(得分:1)
如果您将json和REMOVEQUOTES
的引号添加到副本,那么它可以正常工作。
将测试文件放入s3:
echo x,y,'"{a:b,c:d}"' | aws s3 cp - s3://[bucket]/json/test_file.csv
创建表格:
CREATE TABLE IF NOT EXISTS api_log
(c1 varchar,
c2 varchar,
json_colum varchar(65535));
负载:
COPY api_log
FROM 's3://[bucket]/json/'
CREDENTIALS 'aws_access_key_id=;aws_secret_access_key='
delimiter ','
maxerror as 250
TRUNCATECOLUMNS
REMOVEQUOTES;
或者,如果您不喜欢引号,则可以使用制表符或其他不在数据中的字符。 E.g:
echo -e "x\ty\t{a:b,c:d}" | aws s3 cp - s3://[bucket]/json/test_file.csv
然后:
COPY api_log
FROM 's3://[bucket]/json/'
CREDENTIALS 'aws_access_key_id=;aws_secret_access_key='
delimiter '\t'
maxerror as 250
TRUNCATECOLUMNS
REMOVEQUOTES;
不管怎样,你得到:
select * from api_log;
c1 | c2 | json_colum
----+----+------------
x | y | {a:b,c:d}