我有一个相对较大的MongoDB集合,我正在迁移到Redshift。这是〜600毫米的文档,所以我希望副本尽可能高效。 问题是,我的Mongo集合中有一个数组字段,但是我想在Redshift中将数组中的每个值插入到单独的行中。
蒙戈:
{
id: 123,
names: ["market", "fashion", "food"]
}
在Redshift中,我想要" id"和"名称",其中主键是(id,name)。所以我应该从那个mongo文档中获得3个新的Redshift行。
是否可以使用Redshift COPY命令执行此操作?我可以将我的数据导出为csv或json到s3,但由于需要多长时间来处理这么多文档,我不想对数据进行任何额外的处理。
答案 0 :(得分:0)
你可以在带有触发器的COPY上做到这一点,但它很尴尬并且性能会很糟糕(因为你不能只转换行并且需要从触发函数做INSERT) )。
这是一个微不足道的转变,为什么不在出口时通过任何脚本语言传递它?
您也可以按原样导入,然后进行转换(在Redshift上应该非常快):
CREATE TABLE mydata_load (
id int4,
names text[]
);
复制
CREATE TABLE mydata AS SELECT id, unnest(names) as name FROM mydata_load;
答案 1 :(得分:0)