- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我们希望将 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/
我们可以直接将一张表从一个 Redshift 集群复制到另一个 Redshift 集群吗? 我知道可以使用 s3 作为临时存储来实现表复制(即从第一个集群卸载到 s3,然后从 s3 复制到另一个集群)
我在 AWS Redshift 集群中执行了以下操作以从 S3 读取 Parquet 文件。 create external schema s3_external_schema from data c
我在 AWS Redshift 集群中执行了以下操作以从 S3 读取 Parquet 文件。 create external schema s3_external_schema from data c
在 Amazon Redshift 中创建数据表时,您可以指定各种 encodings,例如 MOSTLY32 或 BYTEDICT 或 LZO。这些是在磁盘上存储列值时使用的压缩。 我想知道我选择的
我在 s3 中有一个压缩文件。我想将它插入到 RedShift 数据库中。我的研究发现做到这一点的唯一方法是启动一个 ec2 实例。将文件移到那里,解压缩,然后将其发送回 S3。然后将其插入到我的 R
为了在 Multi-Tenancy 维度 DW 中处理特定对象的自定义字段,我创建了 Redshift 不太喜欢的超宽非规范化维度表(数百列,列的硬编码限制);)。 user1|attr1|attr2
Redshift 文档将时间序列表确定为最佳实践: http://docs.aws.amazon.com/redshift/latest/dg/c_best-practices-time-series
我正在使用 redshift 的 COPY 命令从 S3 复制 json 数据。 表定义如下: CREATE TABLE my_raw ( id BIGINT IDENTITY(1,1), ... .
如何获取导出的键(数据库元数据)。即使 redshift 不支持外键和主键,我也可以在系统表中看到它们。这里的问题是在系统表中,外键的多列作为数组存在于一列中(尽管redshift不支持数组)。是否可
我正在寻找一种创建 Redshift 查询的方法,该查询将从每天生成的表中检索数据。我们集群中的表具有以下形式: event_table_2016_06_14 event_table_2016_06_
在 Redshift 中,当我们将结果导入 TABLEAU 时,我们试图为从查询返回的列提供更有意义的别名,问题是 RedShift 将所有字母转换为小写字母,即从“事件日期” ” 然后它返回“事件日
据我了解,Redshift 是为性能而不是可用性而构建的。文档 https://aws.amazon.com/redshift/faqs/建议一旦任何一个节点宕机,整个集群都会宕机,直到该节点恢复。在
我试图找出与中止查询相关的原因/错误,其中可以从 STL_query 表中找到中止的查询。我为此使用了 STL_errors,但发现错误上下文与 process id 相关,而不是特定的查询 id。有
我们正在使用 AWS Redshift DB 并希望创建一个在线复制(这样也可以完全更新更改)? 原因是我们希望为我们的一个部门提供一个单独的环境来运行他们自己的查询,因为他们可能会“发疯”并做一些
我在使用 DataGrip 的 Redshift 集群上运行查询需要超过 10 个小时才能运行,不幸的是,这些查询经常失败。唉,DataGrip 与数据库的连接保持的时间不够长,我无法看到查询失败的错
我正在对 redshift 中的一些查询进行基准测试,以便我可以对我对表所做的更改进行一些智能说明,例如添加编码和运行 vacuum。我可以查询stl_query带有 LIKE 子句的表来查找我感兴趣
删除表后,redshift 是否回收可用磁盘空间,或者我们是否需要运行 vaccum。 最佳答案 drop table 释放空间。 如果您正在对表的行进行删除操作,那么您应该触发 vaccumm de
有没有办法在 Amazon Redshift 中计算具有固定窗口大小的加权移动平均值?更详细地说,给定一个带有日期列和值列的表,对于每个日期计算指定大小窗口的加权平均值,并在辅助表中指定权重。 到目前
我注意到第一次在 RedShift 上运行查询需要 3-10 秒。当我再次运行相同的查询时,即使在 WHERE 条件中使用不同的参数,它也会运行得很快(0.2 秒)。 我正在谈论的查询在一个约 1M
我明白 the COPY command非常有效地导入大量数据。但是使用 the INSERT command 将数据从一个表复制到另一个表是慢的。有没有更有效的方法将数据从一个表复制到另一个表?或者
我是一名优秀的程序员,十分优秀!