导出 JSON 数据并加载到关系数据库中

Posted

技术标签:

【中文标题】导出 JSON 数据并加载到关系数据库中【英文标题】:Export JSON data and load into a Relational Database 【发布时间】:2014-07-22 03:23:55 【问题描述】:

是否有将 JSON 数据转换为具有多个表的关系数据库的标准方法?我们需要从 MongoDB 实例中导出数据并将它们导入 Redshift 集群。唯一的问题是一些 MongoDB 字段包含对象和数组。 Redshift 集群接受 CSV,所以我认为每个新表的输出至少是一个 CSV 文件。

我不需要具体的实现。我只是想知道如何有效地将 JSON/NoSQL 数据转换为关系格式的概念。

【问题讨论】:

【参考方案1】:

我们有存储 JSON 数据的 mongo 数据库。我们想将数据迁移到 Redshift 以进行某些查询。

我们使用 mongoexport csv 从 mongo 表创建 csv 并将其上传到 S3。我们在 Redshift 中创建了相应的关系模式,并使用复制命令将这些 csv 数据从 s3 加载到 redshift。

我们可以使用java apis查询mongo,创建csv并上传到s3。同样可以加载到redshift。

真正的问题是,由于我们使用 mongo (json) 或 NoSQL,对于属于同一个表的给定对象,我们可能有不同数量的列(就像我们使用 JSON 一样),但是在 Redshift 中,每个表的列数是固定的所以在在这种情况下,您需要创建所有可能的列并加载数据。对于那些没有所有列的对象,我们可以为它们填充空值。

【讨论】:

我们面临的挑战是将 M​​ongoDB 中 Array 类型的字段转换为关系数据(即多个表)。这是因为 Redshift 对 JSON 函数的支持非常有限。此外,我们的数据达到数百万条记录,有 30 多个字段。 是的,我们在 MongoDB 中有数组(如果我们考虑 php 数组,则为嵌套数组)。我们用所有可能的列将它们转换为 csv 格式。转换为 csv 后,我们有大约 33 列和 3 亿行。我们稍后使用复制命令将其加载到 Redshift

以上是关于导出 JSON 数据并加载到关系数据库中的主要内容,如果未能解决你的问题,请参考以下文章

SSAS Tabular模式中关系设置不支持多对多?

Neo4J 图形数据库中关系属性的更快检索

核心数据 - NSManagedObject(有关系)到 JSON

前端,后台,数据库之间的关系是啥

javascript中关系运算符的说明

Spring JPA中关系的动态获取