我们在mongodb中有一些我们希望转移到redshift的集合(每天自动增量).我们怎么做?我们应该将mongo导出到csv吗?
我编写了一些代码,用于将数据从Mixpanel导出到Redshift中以供客户端使用.最初客户端正在导出到Mongo,但我们发现Redshift为查询提供了非常大的性能改进.首先,我们将数据从Mongo传输到Redshift,然后我们想出了一个直接的解决方案,将数据从Mixpanel传输到Redshift.
要首先在Redshift中存储JSON数据,您需要创建一个SQL DDL来将模式存储在Redshift中,即CREATE TABLE
脚本.
您可以使用Variety之类的工具来帮助您,因为它可以让您深入了解Mongo架构.但是它确实很难处理大数据集 - 您可能需要对数据集进行二次采样.
或者,DDLgenerator可以从各种来源生成DDL,包括CSV或JSON.这也困扰着大型数据集(我正在处理的数据集是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
- 我使用数据样本来显示流程的工作原理.但是,如果数据库具有架构变体,则需要基于整个数据库计算架构,这可能需要几个小时.
接下来,将数据上传到Redshift.
如果已导出JSON,则需要使用Redshift的JSON复制功能.您需要定义一个JSONpath来执行此操作.
欲了解更多信息,请查阅扫雪博客- 他们使用JSONpaths到JSON映射到一个关系模式.查看他们的博客文章,了解人们为什么要将JSON读取到Redshift.
开启JSON成列允许比快得多查询其他方法,如使用JSON EXTRACT PATH TEXT
.
对于增量备份,它取决于是添加数据还是数据正在更改.对于分析,它通常是前者.我使用的方法是每天导出一次分析数据,然后以增量方式将其复制到Redshift中.
这里有一些相关的资源,但最后我没有使用它们:
Spotify有一个名为Luigi的开源项目 - 这段代码声称将JSON上传到Redshift但我还没有使用它,所以我不知道它是否有效.
Amiato有一个网页,上面写着他们提供了一个商业解决方案,用于将JSON数据加载到Redshift中 - 但除此之外没有太多信息.
这篇博客文章讨论了在JSP数据源上执行ETL,例如将Mixpanel转换为Redshift.
相关的Redit问题
有关在Redshift中处理JSON数组的博客文章
老实说,我建议在这里使用第三方.我使用过Panoply(panoply.io)并推荐它.它会把你的mongo收藏品变成他们在红移中的表格.