使用复制命令将 Json 文件加载到 redshift
Posted
技术标签:
【中文标题】使用复制命令将 Json 文件加载到 redshift【英文标题】:Loading Json file into redshift using copy command 【发布时间】:2018-08-20 16:07:47 【问题描述】:我正在尝试使用提供 json 路径的复制命令将以下 json 文件加载到 redshift 中。我无法加载文件并出现错误,我从以前的帖子中了解到它可能不支持 ',' 在数组结束后。有什么方法可以在不进行任何预处理的情况下加载文件?
"users": [
"id": 1111,
"name": "ABCD"
,
"id": 2222,
"name": "PQRS"
,
"id": 3333,
"name": "WXYZ"
]
【问题讨论】:
是否打算加载到Users
表中,这将导致3 行数据?如果是这样,这与 Redshift 期望的格式不匹配,需要进行预处理。
你应该发布你的表 schema
和 copy query
以获得解决方案..
【参考方案1】:
您目前无法使用 COPY
加载此内容。 但是,我们最近推出了使用 Redshift Spectrum 查询嵌套数据的功能。您可以使用此功能将数据插入到 Redshift 表中。
这是一个例子:
"users": [
"id": 1111,
"name": "ABCD" ,
"id": 2222,
"name": "PQRS" ,
"id": 3333,
"name": "WXYZ"
]
aws s3 cp ~/nested_data.json s3://my-bucket/nested_data/nested_data.json
DROP TABLE IF EXISTS spectrum.nested_simple;
CREATE EXTERNAL TABLE spectrum.nested_simple
(users array<struct<id:int, name:varchar(20)>> )
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://my-bucket/nested_data/'
;
SELECT u.id
,u.name
FROM spectrum.nested_simple c
INNER JOIN c.users u ON true
;
-- id | name
--------+------
-- 1111 | ABCD
-- 2222 | PQRS
-- 3333 | WXYZ
建议完成我们的嵌套数据教程。 https://docs.aws.amazon.com/redshift/latest/dg/tutorial-query-nested-data.html
【讨论】:
以上是关于使用复制命令将 Json 文件加载到 redshift的主要内容,如果未能解决你的问题,请参考以下文章
使用 COPY 命令将数据从 JSON 文件复制到 Redshift