qui*_*are 4 json azure azure-data-factory
这是我的情况
我有 Azure 表作为源,我的目标是 Azure SQL 数据库。源表看起来像这样:
| ID | 文件名 | 元数据 |
|---|---|---|
| 1 | 文件_1.txt | {“公司”:{“id”:555,“名称”:“A公司”},“质量”:[{“质量”:3,“文件名”:“file_1.txt”},{“质量”: 4、“file_name”:“未知”}]} |
| 2 | 文件_2.txt | {"公司": { "id": 231, "姓名": "公司B" }, "质量": [{"质量": 4, "文件名": "file_2.txt"}, {"质量": 3、“file_name”:“未知”}]} |
| 3 | 文件_3.txt | {“公司”:{“id”:111,“名称”:“C公司”},“质量”:[{“质量”:5,“文件名”:“未知”},{“质量”:4, "file_name": "file_3.txt"}]} |
目标表应该如下所示:
| ID | 文件名 | 公司 | 质量 |
|---|---|---|---|
| 1 | 文件_1.txt | A公司 | 3 |
| 2 | 文件_2.txt | B公司 | 4 |
| 3 | 文件_3.txt | C公司 | 4 |
这意味着我需要解析该字符串中的数据以获取新的列值,并根据源中的 file_name 列使用质量值。
我做的第一件事是创建一个复制管道,将数据从 Azure 表 1 对 1 传输到 Azure Data Lake Store 上的 parquet 文件,以便我可以将其用作数据流中的源。接下来,想法是使用派生列并使用一些表达式来获取数据,但据我所知,没有表达式将此字符串视为 JSON 对象。
因此,下一个想法可能是在此过程之前添加一个步骤,我将元数据列的内容提取到 ADLS 上的单独文件中,并使用该文件作为源或查找,并将其定义为 JSON 文件。这意味着我需要将 id 值添加到 JSON 文件,以便我能够将数据绑定回记录。
第一个解决方案看起来更有希望,但如果这不是一个选择,我将研究其他可能的解决方案。
谢谢
select t.id, A.Company,A.quality,A.file_name,A.quality_s,A.file_name_s\n from dbo.test t\n CROSS APPLY OPENJSON(t.metadata) \n WITH (\n company varchar(255) \'$.Company.Name\',\n quality varchar(255) \'$.quality[0].quality\',\n file_name varchar(255) \'$.quality[0].file_name\',\n quality_s varchar(255) \'$.quality[1].quality\',\n file_name_s varchar(255) \'$.quality[1].file_name\'\n ) A\nRun Code Online (Sandbox Code Playgroud)\n查询结果如下:
\n
\n然后使用数据流再做进一步的处理。当我回到我的电脑时,我会向你展示详细信息。
用于DerivedColumn1生成新列,
\n FileName: case(equalsIgnoreCase(file_name,\'unknown\'),file_name_s,file_name),
\n QualityS: case(equalsIgnoreCase(file_name,\'unknown\'),quality_s,quality)\n
\n数据预览如下:\n
然后我们可以将结果存入 SQL 表。
\n| 归档时间: |
|
| 查看次数: |
11602 次 |
| 最近记录: |