在Redshift中复制JSON列

时间:2015-08-19 14:58:19

标签: json copy amazon-redshift

我必须从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}

1 个答案:

答案 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}