草庐IT

MongoDB到 Redshift

coder 2023-05-04 原文

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

有关MongoDB到 Redshift的更多相关文章

  1. ruby-on-rails - 在一个 Rails 应用程序中使用 PostgreSQL 的 MongoDB - 2

    我可以在一个Rails应用程序中同时使用MongoDB和PostgreSQL吗?具体来说,我最终会想要使用像MongoHQ这样的东西。到目前为止,我未能在实验中进行这项工作。令我担心的是,MongoDB文档特别指出我必须禁用ActiveRecord。任何建议将不胜感激。 最佳答案 您无需禁用ActiveRecord即可使用MongoDB。查看Mongoid只需将gem加上任何模型与您现有的任何ActiveRecord模型一起添加。您应该注意到MongoHQ只是MongoDB的托管服务,可以与任何对象文档映射器(ODM)一起使用。更多

  2. ruby - 使用 mongodb/mongoid 运行时更改模型 - 2

    我必须在mongoid模型中添加几个字段,我知道MongoDB没有迁移,但如果我继续而不删除数据库,使rails完全“重新生成”数据库,它不会显示或使用新的领域!去这里最好的方法是什么?有比删除/重新打开mongodb更软的东西吗?提前致谢卢卡 最佳答案 一般来说,应该可以在运行时用新字段更新旧文档。MongoDB中不需要迁移。您可能想编写rake任务以使用新字段和默认值更新旧文档。您可以通过检查那些默认值为nil的新字段来找到这些文档。更新简单风格:如果您使用默认值定义一个新字段,只要您设置了一个新值,就应该始终使用该值:应用程序

  3. ruby-on-rails - 我如何从 Ruby 代码连接到 mongodb? - 2

    我如何从Ruby代码连接到mongodb? 最佳答案 首先,您必须安装MongoDbgem:geminstallmongo然后运行代码:require'rubygems'#notnecessaryforRuby1.9require'mongo'db=Mongo::Connection.new.db("mydb")#ORdb=Mongo::Connection.new("localhost").db("mydb")#ORdb=Mongo::Connection.new("localhost",27017).db("mydb")

  4. ruby - MongoDB:无法从 BSON 类型 EOO 转换为 Date - 2

    我正在尝试使用聚合框架(使用ruby​​)并像这样投影日期:db['requests'].aggregate([{"$project"=>{_id:0,method:'$method',user:'$user',year:{'$year'=>'$timestamp'}}}])文档是这样的:{_id:ObjectId("5177d7d7df26358289da7dfd"),timestamp:ISODate("2013-04-12T03:58:05+00:00"),method:"POST",status:"200",inputsize:"874",outputsize:"4981",u

  5. ruby - 在 Ruby 中从 MongoDB 中检索字段的子集 - 2

    我试图通过在Ruby中进行的查询从MongoDB获取字段的子集,但它似乎不起作用。它不返回任何结果这是ruby代码:coll.find("title"=>'Halo',:fields=>["title","isrc"])#thisdoesn'twork如果我删除字段散列,它会工作,返回包含所有字段的结果coll.find("title"=>'Halo')#thisworks查看mongodb控制台,第一个查询在mongodb服务器上结束,如下所示:{title:"Halo",fields:["title","isrc"]}如果我尝试从mongo客户端控制台进行查询,它会工作,我会得到结

  6. Elasticsearch和MongoDB对比 - 2

    文章目录Elasticsearch和MongoDB对比关于ElasticsearchElasticsearch应用场景关于MongoDBMongoDB优点mongodb适用场景Elasticsearch和MongoDB对比Elasticsearch和MongoDB开源许可协议参考Elasticsearch和MongoDB对比关于Elasticsearch官网:https://www.elastic.co/cn/elasticsearch/Elasticistheleadingplatformforsearch-poweredsolutions.Weaccelerateresultsthatma

  7. javascript - 类型错误 : mongodb property insertmany is not a function - 2

    db.col.insertMany([{"_id":"tt0084726","title":"StarTrekII:TheWrathofKhan","year":1982,"type":"movie"},{"_id":"tt0796366","title":"StarTrek","year":2009,"type":"movie"},{"_id":"tt0084726","title":"StarTrekII:TheWrathofKhan","year":1982,"type":"movie"}]);OS:LinuxMint17.3RosaMongoDB:dbversionv2.6.1

  8. javascript - 如何使用 javascript 中的 http.post 将图像发送到服务器并在 mongodb 中存储 base64 - 2

    我在使用mongodb在服务器端存储图像的客户端访问http请求时遇到了问题。我非常感谢帮助。我需要一个简单的示例来说明如何将图像文件作为数据添加到httppost请求(例如XMLhttprequest)中。比方说,我知道服务器方法的网址。图片来源定义在imgsrc文件名存放在name我有这个自动取款机:varhttp=newXMLHttpRequest();httpPost.onreadystatechange=function(err){if(httpPost.readyState==4&&httpPost.status==200){console.log(httpPost.res

  9. 【MongoDB】windows安装MongoDB6.0.5+可视化界面软件 - 2

    目录MongoDB简介安装MongoDB  安装MongoDBShell添加账户密码 安装MongoDBCompassMongoDB简介MongoDB是一个流行的开源文档型NoSQL数据库管理系统,使用C++语言编写。与传统的关系型数据库不同,MongoDB使用文档模型来存储数据。文档模型是一种灵活的数据模型,它允许您在单个文档中存储和查询相关数据。文档模型还支持嵌套文档和数组结构,这使得它非常适合处理复杂的数据结构。MongoDB的特点包括:非常灵活的文档模型,可以轻松存储复杂数据类型。分布式系统设计,可以通过分片技术实现横向扩展,适合大规模数据处理。支持丰富的查询语言和聚合框架,使得开发人

  10. Helm部署minio\nginx\mongodb\elasticsearch - 2

    minioappVersion:2022-06-25chartVersion:11.7.7一、独立模式auth:auth:rootPassword:"12345678rtt"#密码长度需>=8位rootUser:"root"mode:standalone#默认为单机模式persistence:storageClass:minio-data#存储类,必填size:8Giservice:type:NodePort#暴露端口port:9000nodePort:31311二、分布式模式auth:auth:rootPassword:"12345678rtt"#密码长度需>=8位rootUser:"roo

随机推荐