首页 > 解决方案 > 如何将 Azure cosmos Db 中的非结构化 json 文件转换为结构化表?

问题描述

我在 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 值。

标签: jsonazure

解决方案


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

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

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


推荐阅读