2014-01-28 22 views
9

我们在MongoDB中,我们希望转移到红移(自动增量每天的基础上)的几个集合。 我们该怎么做?我们应该将mongo导出到csv吗?MongoDB的红移

+2

我认为如果人们想投票,为什么要添加评论会有帮助? –

+0

相关问题在这里:http://stackoverflow.com/questions/23835567/copying-json-objects-with-multiple-layouts-from-s3-int-redshift –

+0

另一个相关的问题http://stackoverflow.com/questions/ 24878374 /出口JSON数据并加载 - 到 - 一的关系数据库 –

回答

0

这将有助于了解的几个问题是:

  1. 这是只添加一个插件始终只能增加增量同步,即数据并没有更新/删除或者说你的红移实例只对增加感兴趣?
  2. 数据不一致是由于删除/更新发生在源头而没有被送入redshift实例吗?
  3. 它是否需要日常增量批处理,或者它是否可以实时发生?

根据您的情况,mongoexport可能适合您,但您必须了解它的缺点,您可以在http://docs.mongodb.org/manual/reference/program/mongoexport/找到它的缺点。

0

我不得不解决同样的问题(不是每天都有)。 as ask mentioned,您可以使用mongoexport来导出数据,但请记住红移不支持数组,所以万一您的集合数据包含数组,您会发现它有点问题。

我对这个解决方案是管mongoexport成一个小工具程序我写的变换mongoexport JSON行到我期望的CSV输出。 管道输出也允许您使过程平行。

Mongoexport允许您为命令添加一个mongodb查询,因此如果您的集合数据支持它,您可以产生N个不同的mongoexport进程,将其结果导入其他程序并减少迁移过程的总运行时间。

后来,我上传的文件到S3,并进行复制到相关的表。
这应该是一个非常简单的解决方案。

13

我写了一些代码从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中。

这里有一些相关的资源,虽然最终我没有使用它们:

5

老实说,我在这里推荐使用第三方。我使用了Panoply(panoply.io)并会推荐它。它会把你的mongo系列收集起来,并用红移将它们压平成他们自己的表格。

0

以csv格式将数据从mongodb逐步导出到csv文件。 使用红移复制命令将csv文件复制到红移。