在 Redshift 中复制 JSON 列
Posted
技术标签:
【中文标题】在 Redshift 中复制 JSON 列【英文标题】:Copy JSON column in Redshift 【发布时间】:2015-08-19 14:58:19 【问题描述】:我必须从 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;
提交;
样本数据是 -
c1 c2 c3
X Y a:b,c:d
【问题讨论】:
【参考方案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;
或者,如果您不喜欢引号,您可以使用制表符或其他不会出现在数据中的字符。例如:
echo -e "x\ty\ta: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
【讨论】:
以上是关于在 Redshift 中复制 JSON 列的主要内容,如果未能解决你的问题,请参考以下文章