我们在mongodb中有几个集合,我们希望将它们转移到redshift (每天自动递增)。我们该怎么做呢?我们应该把mongo导出到csv吗?
发布于 2014-10-11 06:00:19
我写了一些代码来将数据从Mixpanel导出到客户端的Redshift中。最初客户端导出到Mongo,但我们发现Redshift为查询提供了非常大的性能改进。因此,首先我们将数据从Mongo传输到Redshift,然后我们提出了一个直接的解决方案,将数据从Mixpanel传输到Redshift。
要在Redshift中存储JSON数据,首先需要在Redshift中创建一个SQL来存储模式,即一个CREATE TABLE脚本。
您可以使用像Variety这样的工具来提供帮助,因为它可以让您深入了解您的Mongo模式。然而,它确实很难处理大型数据集-您可能需要对数据集进行二次采样。
或者,DDLgenerator可以从各种来源生成DDL,包括CSV或JSON。这也很难处理大型数据集(我处理的数据集是120 was )。
因此,从理论上讲,您可以使用MongoExport从Mongo生成CSV或JSON,然后通过DDL生成器运行它来获得DDL。
在实践中,我发现使用JSON导出更容易一些,因为您不需要指定要提取的字段。您需要选择JSON数组格式。具体地说:
mongoexport --db <your db> --collection <your_collection> --jsonArray > data.json
head data.json > sample.json
ddlgenerator postgresql sample.json 这里-因为我使用的是head -我使用了一个数据样本来展示这个过程的工作原理。但是,如果您的数据库具有模式变体,则需要基于整个数据库计算模式,这可能需要几个小时。
接下来,将数据上传到Redshift。
如果您已经导出了JSON,则需要使用Redshift的Copy from JSON功能。您需要define a JSONpath才能做到这一点。
有关更多信息,请查看Snowplow博客- they use JSONpaths to map the JSON on to a relational schema。查看他们的blog post about why people might want to read JSON to Redshift。
将JSON转换为列可以实现比使用JSON EXTRACT PATH TEXT等other approaches快得多的查询。
对于incremental backups,它取决于是添加数据还是更改数据。对于分析来说,通常是前者。我使用的方法是每天导出一次分析数据,然后以增量方式将其复制到Redshift中。
下面是一些相关的资源,尽管我最后并没有使用它们:
发布于 2017-04-09 14:45:54
老实说,我建议在这里使用第三方。我使用过Panoply (panoply.io),并推荐它。它将获取您的mongo集合,并在红移中将它们展平到它们自己的表中。
发布于 2017-04-22 17:36:22
亚马逊网络服务数据库迁移服务( DMS )增加了对MongoDB和亚马逊DynamoDB.So的支持,我认为现在从MongoDB迁移到Redshift的最佳选择是DMS。
作为数据库的
详细信息- http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.MongoDB.html
https://stackoverflow.com/questions/21406392
复制相似问题