在redshift中加载json数组的内容

时间:2014-07-01 14:31:55

标签: amazon-redshift

我正在设置redshift并从mongo导入数据。我已成功将json路径文件用于简单文档,但现在需要从包含数组的文档导入。

{
   "id":123,
   "things":[
      {
         "foo":321,
         "bar":654
      },
      {
         "foo":987,
         "bar":567
      }
   ]
}

如何将上述内容加载到如下表中:

select * from things;

    id  | foo  | bar
--------+------+-------
   123  | 321  | 654
   123  | 987  | 567

还是有其他方式吗?

我不能将json数组存储在varchar(max)列中,因为Things的内容可能超过64K。

1 个答案:

答案 0 :(得分:1)

鉴于

db.baz.insert({
   "myid":123,
   "things":[
      {
         "foo":321,
         "bar":654
      },
      {
         "foo":987,
         "bar":567
      }
   ]
});

以下内容将显示您想要的字段

  

db.baz.find({},{" things.foo":1," things.bar":1})

要展平结果集,请使用聚合

 db.baz.aggregate( 
 {"$group": {"_id": "$myid", "things": { "$push" : {"foo":"$things.foo","bar":"$things.bar"}}}},
 {    
   $project : {
     _id:1,
     foo : "$things.foo",
     bar : "$things.bar"   
   } 
  },
  { "$unwind" : "$foo" },
  { "$unwind" : "$bar" }
);