json - 使用 Azure 数据工厂解析列中的 JSON 字符串

标签 json azure azure-data-factory

这是我的情况

我有 Azure 表作为源,我的目标是 Azure SQL 数据库。 源表看起来像这样:

<表类=“s-表”> <标题> id 文件名 元数据 <正文> 1 file_1.txt {"公司": { "id": 555, "名称": "A公司"}, "quality": [{"quality": 3, "file_name": "file_1.txt"}, {"质量": 4, "file_name": "未知"}]} 2 file_2.txt {"公司": { "id": 231, "名称": "公司 B"}, "quality": [{"quality": 4, "file_name": "file_2.txt"}, {"质量": 3, "file_name": "未知"}]} 3 file_3.txt {"公司": { "id": 111, "姓名": "C公司"}, "质量": [{"质量": 5, "文件名": "未知"}, {"质量": 4, "file_name": "file_3.txt"}]}

目标表应该如下所示:

<表类=“s-表”> <标题> id 文件名 公司 质量 <正文> 1 file_1.txt 公司A 3 2 file_2.txt B公司 4 3 file_3.txt C公司 4

这意味着我需要解析该字符串中的数据以获取新的列值,并根据源中的 file_name 列使用质量值。

我做的第一件事是创建一个复制管道,将数据从 Azure 表 1 对 1 传输到 Azure Data Lake Store 上的 parquet 文件,以便我可以将其用作数据流中的源。 接下来,想法是使用派生列并使用一些表达式来获取数据,但据我所知,没有表达式将此字符串视为 JSON 对象。

因此,下一个想法可能是在此过程之前添加一个步骤,我将元数据列的内容提取到 ADLS 上的单独文件中,并使用该文件作为源或查找并将其定义为 JSON 文件以开始和。这意味着我需要将 id 值添加到 JSON 文件,以便我能够将数据绑定(bind)回记录。

第一个解决方案看起来更有希望,但如果这不是一个选择,我会研究其他可能的解决方案。

谢谢

最佳答案

我的调试结果如下: enter image description here

  1. 我认为您可以使用 OPENJASON 来解析 JSON 字符串。
    select t.id, A.Company,A.quality,A.file_name,A.quality_s,A.file_name_s
        from dbo.test t
        CROSS APPLY OPENJSON(t.metadata) 
        WITH (
            company varchar(255) '$.Company.Name',
            quality varchar(255) '$.quality[0].quality',
            file_name varchar(255) '$.quality[0].file_name',
            quality_s varchar(255) '$.quality[1].quality',
            file_name_s varchar(255) '$.quality[1].file_name'
        ) A

查询结果如下:
enter image description here
然后利用数据流再做进一步的处理。当我回到我的电脑时,我会向你展示详细信息。

  • 使用 ADF 中的复制事件,将查询结果复制到 csv 中。 enter image description here

  • 使用数据流处理此 csv 文件。设置Copy事件生成的csv文件为源,数据预览如下: enter image description here

  • 使用DerivedColumn1生成新列,
    文件名:case(equalsIgnoreCase(file_name,'unknown'),file_name_s,file_name),
    QualityS:case(equalsIgnoreCase(file_name,'unknown'),quality_s,quality) enter image description here 数据预览如下: enter image description here

  • 使用Select1事件来过滤我们想要的列。 enter image description here 数据预览如下: enter image description here

  • 然后我们可以将结果存入 SQL 表。

  • 关于json - 使用 Azure 数据工厂解析列中的 JSON 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66437383/

    相关文章:

    c# - 具有抽象类作为方法参数的 WCF 服务

    azure - 无法使用自定义程序集访问 U-SQL 代码隐藏中的自定义文件?

    angular - 每个分支的 Azure Devops azure-pipelines.yml

    Azure SQL DB 到 Azure SQL DB 的复制

    Azure 数据工厂和 SharePoint

    c++ - 使用 boost property_tree 创建 json 数组

    json - 在 Swift 中动态构建 JSON

    azure - 使用托管代理通过 VSTS 发布管道部署 Service Fabric 应用程序

    azure - 在Azure数据工厂中,是否可以使用另一个源中的列来过滤复制事件的源查询?

    json - 如何预加载 JSON 数据以便在 Angularjs 模块准备好时可用