我们在MongoDB中,我们希望转移到红移(自动增量每天的基础上)的几个集合。 我们该怎么做?我们应该将mongo导出到csv吗?MongoDB的红移
回答
这将有助于了解的几个问题是:
- 这是只添加一个插件始终只能增加增量同步,即数据并没有更新/删除或者说你的红移实例只对增加感兴趣?
- 数据不一致是由于删除/更新发生在源头而没有被送入redshift实例吗?
- 它是否需要日常增量批处理,或者它是否可以实时发生?
根据您的情况,mongoexport可能适合您,但您必须了解它的缺点,您可以在http://docs.mongodb.org/manual/reference/program/mongoexport/找到它的缺点。
我不得不解决同样的问题(不是每天都有)。 as ask mentioned,您可以使用mongoexport来导出数据,但请记住红移不支持数组,所以万一您的集合数据包含数组,您会发现它有点问题。
我对这个解决方案是管mongoexport成一个小工具程序我写的变换mongoexport JSON行到我期望的CSV输出。 管道输出也允许您使过程平行。
Mongoexport允许您为命令添加一个mongodb查询,因此如果您的集合数据支持它,您可以产生N个不同的mongoexport进程,将其结果导入其他程序并减少迁移过程的总运行时间。
后来,我上传的文件到S3,并进行复制到相关的表。
这应该是一个非常简单的解决方案。
我写了一些代码从Mixpanel的数据导出到红移为客户端。最初,客户端正在向Mongo出口,但我们发现Redshift为查询提供了非常大的性能改进。因此,首先我们将数据从Mongo传输到Redshift,然后我们提出了一个直接的解决方案,将数据从Mixpanel传输到Redshift。
要存储在红移JSON数据首先你需要创建一个SQL DDL到模式存储在红移即一个CREATE TABLE
脚本。
您可以使用一个工具,如Variety帮助,因为它可以给你一些洞察到你的蒙戈架构。然而,它确实与大数据集争执 - 您可能需要对数据集进行二次抽样。
备选地DDLgenerator可以从各种来源,包括CSV或JSON产生DDL。这也与大数据集争执(我所处理的数据集是120GB)。
因此理论上您可以使用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
- 我用的是数据的样本显示过程的工作。但是,如果数据库具有架构变体,则需要基于整个数据库计算架构,这可能需要几个小时。
接下来将数据上传到红移。
如果您已经导出JSON,你需要使用红移的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成列允许比other approaches例如更快的查询与使用JSON EXTRACT PATH TEXT
。
对于增量备份,它取决于数据是否被添加或数据是否正在改变。对于分析,通常是前者。我使用的方法是每天导出一次分析数据,然后以增量方式将其复制到Redshift中。
这里有一些相关的资源,虽然最终我没有使用它们:
- Spotify的有一个叫路易吉一个开源项目 - this code要求上传JSON来红移,但我没有用它,我不知道它是否有效。
- Amiato有一个网页,表示他们提供了一个将JSON数据加载到Redshift的商业解决方案 - 但除此之外没有太多信息。
- This blog post讨论在JSON数据源(如Mixpanel到Redshift)上执行ETL。
- Related Redit question
- Blog post about dealing with JSON arrays in Redshift
老实说,我在这里推荐使用第三方。我使用了Panoply(panoply.io)并会推荐它。它会把你的mongo系列收集起来,并用红移将它们压平成他们自己的表格。
AWS数据库迁移服务(DMS)将支持MongoDB的和Amazon DynamoDB.So我觉得现在起,从MongoDB中迁移到红移最好的选择是DMS。
- MongoDB的版本的2.6.x和3.x作为数据库源
- 文档模式和表模式支持
- 支持变更数据捕获(CDC)
详细 -http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.MongoDB.html
以csv格式将数据从mongodb逐步导出到csv文件。 使用红移复制命令将csv文件复制到红移。
- 1. 节点红色MongoDB
- 2. MongoDB的红宝石日期
- 3. 在红移
- 4. PERCENTILE_CONT()在红移
- 5. 上红移
- 6. 在红移列
- 7. REGEX_SUBSTR红移
- 8. 撤消红移
- 9. 在红移
- 10. 红移与COPY
- 11. CopyCommand红移
- 12. 红移插槽
- 13. MongoDB迁移
- 14. 红移在新表
- 15. 编码在红移
- 16. Boto3 - 描述红移
- 17. 如何在红移
- 18. generate_series()方法红移
- 19. 无法从红移
- 20. 换位表红移
- 21. AWS红移DEFAULT TIMESTAMP
- 22. 不能在红移
- 23. listagg与红移DISTINCT
- 24. 红移VARCHAR太窄
- 25. [R红移dbExistTable dbWriteTable
- 26. 重叠功能的红移
- 27. 带SSIS/SSDT的红移
- 28. 更新的红移表
- 29. 列值的红移产品
- 30. 红移不可替代的
我认为如果人们想投票,为什么要添加评论会有帮助? –
相关问题在这里:http://stackoverflow.com/questions/23835567/copying-json-objects-with-multiple-layouts-from-s3-int-redshift –
另一个相关的问题http://stackoverflow.com/questions/ 24878374 /出口JSON数据并加载 - 到 - 一的关系数据库 –