使用复制命令将 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 期望的格式不匹配,需要进行预处理。 你应该发布你的表 schemacopy 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的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON 文件加载到 Redshift

使用 COPY 命令将数据从 JSON 文件复制到 Redshift

将JSON文件加载到Redshift

需要帮忙! - 无法使用 COPY 命令加载 JSON

将具有多个值的 JSON 从 S3 复制到 Redshift

使用复制命令和清单文件将 parquet 格式文件加载到 Amazon Redshift 时出错