使用 json 的亚马逊 redshift 副本遇到问题

Posted

技术标签:

【中文标题】使用 json 的亚马逊 redshift 副本遇到问题【英文标题】:amazon redshift copy using json having trouble 【发布时间】:2017-02-06 11:38:08 【问题描述】:

我创建了一个名为 test3 的简单表

create table if not exists test3(

   Studies varchar(300) not null,
   Series varchar(500) not null
   );

我得到了一些 json 数据


        "Studies": [
                "studyinstanceuid": "2.16.840.1.114151",
                "studydescription": "Some study",
                "studydatetime": "2014-10-03 08:36:00"
        ],
        "Series": [
                "SeriesKey": "abc",
                "SeriesInstanceUid": "xyz",
                "studyinstanceuid": "2.16.840.1.114151",
                "SeriesDateTime": "2014-10-03 09:05:09"
        , 
                "SeriesKey": "efg",
                "SeriesInstanceUid": "stw",
                "studyinstanceuid": "2.16.840.1.114151",
                "SeriesDateTime": "0001-01-01 00:00:00"
        ],

        "ExamKey": "exam-key",

这是我的 json_path



    "jsonpaths": [
        "$['Studies']",
        "$['Series']"
    ]


json数据和json路径都上传到s3。

我尝试在 redshift consule 中执行以下复制命令。

copy test3
from 's3://mybucket/redshift_demo/input.json'
credentials 'aws_access_key_id=my_key;aws_secret_access_key=my_access' 
json 's3://mybucket/redsift_demo/json_path.json'

我收到以下错误。任何人都可以请帮助卡在这个问题上一段时间了。

Amazon](500310) Invalid operation: Number of jsonpaths and the number of columns should match. JSONPath size: 1, Number of columns in table or column list: 2
Details: 
 -----------------------------------------------
  error:  Number of jsonpaths and the number of columns should match. JSONPath size: 1, Number of columns in table or column list: 2
  code:      8001
  context:   
  query:     1125432
  location:  s3_utility.cpp:670
  process:   padbmaster [pid=83747]
  -----------------------------------------------;
1 statement failed.

执行时间:1.58s

【问题讨论】:

s3 凭据的问题与 redshift 无关,我能够解决这个问题。 【参考方案1】:

Redshift 的错误具有误导性。问题是您的输入文件格式错误:在最后一个 JSON 条目之后有一个额外的逗号。

如果您将"ExamKey": "exam-key", 更改为"ExamKey": "exam-key",则Copy 成功

【讨论】:

ketan 感谢您的评论我发现了错误,这是我的错误,我的 s3 凭据错误,基本上是使用将文件上传到 s3 存储桶的 s3cmd 和副本中的 s3 凭据不匹配.一旦我修复了上述错误就消失了。 但您仍然必须按照我的建议删除多余的逗号。否则copy 将失败。

以上是关于使用 json 的亚马逊 redshift 副本遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

使用亚马逊管道的红移副本因缺少主键而失败

基准 Amazon Redshift JSON_EXTRACT_PATH_TEXT

亚马逊 - Redshift:给定日期的周数错误

如何在 Redshift(亚马逊)中更新 UDF?

亚马逊 Redshift 的 REGEXP_SUBSTR 中的“匹配但排除”

如何实现对亚马逊 Redshift 的原始 sql 访问的行级安全性 (RLS)?