gpt4 book ai didi

MongoDB到 Redshift

转载 作者:IT老高 更新时间:2023-10-28 13:14:47 25 4
gpt4 key购买 nike

我们希望将 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 的 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。

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

关于MongoDB到 Redshift ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21406392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com