【问题标题】:How to convert an unstructured json file from Azure cosmos Db to a structured table?如何将 Azure cosmos Db 中的非结构化 json 文件转换为结构化表?
【发布时间】:2019-04-04 09:42:55
【问题描述】:

我在 Azure Cosmos Db (Mongo API) 中有一个带有动态架构的 json 文件。我想读取此文件,将其转换为结构化的 sql 表并存储在 Azure SQL 数据仓库中。我如何做到这一点?

我已经尝试使用复制活动从 Azure 数据工厂读取这些非结构化数据,但 ADF 似乎无法读取非结构化数据。

我的 Cosmos DB 中的样本数据是 -

{
    "name" : "Dren",
    "details" : [
        {
            "name" : "Vinod",
            "relation" : "Father",
            "age" : 40,
            "country" : "India",
            "ph1" : "+91-9492918762",
            "ph2" : "+91-8769187451"
        },
        {
            "name" : "Den",
            "relation" : "Brother",
            "age" : 10,
            "country" : "India"
        },
        {
            "name" : "Vinita",
            "relation" : "Mother",
            "age" : 40,
            "country" : "India",
            "ph1" : "+91-9103842782"
        } ]
}

我希望那些值在 json 文件中不存在的列的值为 NULL。

【问题讨论】:

  • “具有动态架构的 json 文件”是什么意思?
  • json 文件的架构在 cosmos db 中从一个文档更改为另一个文档。该模式还在一个文档中进行了更改,我在上面提供了一个示例。
  • 如果你所有的schema都不一样,并且你不愿意或不能预先定义它们,那么你需要继续使用nosql数据库。
  • 但是如果我的架构如问题中所示,那么我们如何将其转换为表格?
  • 您必须在 JSON 类型和 SQL 列类型之间编写一个映射器。

标签: json azure


【解决方案1】:

如您所见,数据工厂不会处理非结构化数据。 Relequestual 已正确建议需要外部数据映射器,因为 Azure 数据仓库也不提供 JSON 操作。数据工厂有几种方法可以做到这一点。两者都涉及调用另一个服务来为您处理映射。

1) 让管道调用Azure Function 来完成工作。管道将无法将数据传入和传出函数 - 它需要从 Cosmos 读取并自行写入 Azure DW。在两者之间,您可以使用编写函数所用的任何语言进行映射。这样做的好处是它们编写起来相当简单,但是您的扩展能力将受到您的函数可以在几个小时内处理多少数据的限制分钟。

2) 临时跳入和跳出Azure Data Lake。您可以将数据复制到存储帐户(有一些选项可用于 Data Lake Analytics),调用 USQL 作业,然后将结果加载到 Azure DW。这样做的缺点是您正在向存储帐户添加额外的读/写。但是,它确实可以让您根据您的数量进行尽可能多的扩展。如果您愿意,它也使用类似 SQL 的语言。

【讨论】:

  • 感谢@/Samara 的建议。我接受了您的第二个建议,因为我们还必须研究扩展能力,而且我更喜欢 SQL 之类的语言。我没有使用 USQL 作业,但我使用 Databricks 笔记本进行映射。它对我有用。再次感谢您。
猜你喜欢
  • 1970-01-01
  • 2021-12-24
  • 2015-01-05
  • 2017-11-26
  • 2016-02-16
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多