json - 如何使用 Azure 数据工厂管道将嵌套 JSON 对象映射到 SQL Server 表

标签 json sql-server azure azure-data-factory

我调用了 REST API 并检索了结果,并将其作为 JSON 文件放置在 Azure Blob 存储中(所有这些都使用从 Azure 数据工厂复制数据事件)。

{"success": "True",
 "timestamp": "1618498386",
 "base": "EUR",
 "date": "2021-04-15",
 "rates": {
  "AED": 4.395136,
  "AFN": 92.798516,
  "ALL": 123.01053,
  "AMD": 623.68381,
  "UAH": 33.449108,
  "UGX": 4330.311325,
  "USD": 1.196623}}

现在我想使用相同的管道连接到 SQL Server 中具有以下格式的表。

<表类=“s-表”> <标题> 基地 日期 CURR_KEY CURR_VALUE <正文> 欧元 2021-04-15 AED 4.395136 欧元 2021-04-15 AFN 92.798516 欧元 2021-04-15 全部 123.01053 欧元 2021-04-15 AMD 623.68381 欧元 2021-04-15 UAH 33.449108 欧元 2021-04-15 UGX 4330.311325 欧元 2021-04-15 美元 1.196623

这里的挑战是解析嵌套的 JSON 对象“rates”,并通过 ADF 管道将其放置在表中,如上所示。关于如何解决这个问题有什么想法吗?

更新: 我发布了question recently询问如何使用 SQL 查询解析上述 JSON。我发布此文章的原因是寻找仅通过使用 ADF GUI 而不是创建存储过程来解决上述问题的答案。

最佳答案

首先,在 SQL Server 中创建一个存储过程。然后使用 ADF 中的 Lookup 事件来获取 JSON 文件的数据。最后,创建一个存储过程事件并将 Lookup 事件的输出作为参数传递。

详细信息:

enter image description here

enter image description here

存储过程事件中的表达式:@{activity('Lookup1').output.value[0]}

存储过程代码(使用上一个问题的答案):

CREATE PROCEDURE [dbo].[uspTest] @json NVARCHAR(MAX)
AS  

 

BEGIN TRY 
        INSERT INTO dbo.dvalue(base,date,CURR_KEY,CURR_VALUE)
               SELECT
                    j.base,
                    j.date,
                    CAST(rates.[key] AS char(3)) as CURR_KEY,
                    CAST(rates.value AS decimal(15,6)) as CURR_VALUE
                FROM OPENJSON(@json)
                     WITH ([base] char(3),
                           [date] date,
                           rates nvarchar(MAX) AS JSON) j
                     CROSS APPLY OPENJSON(j.Rates) rates;
END TRY  
BEGIN CATCH 
    PRINT ERROR_MESSAGE ( )   
END CATCH
;

关于json - 如何使用 Azure 数据工厂管道将嵌套 JSON 对象映射到 SQL Server 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67198801/

相关文章:

android - 使用Azure开发网站,然后为其创建原生iOS和Android应用程序,什么是好的数据架构?

java - 按条件用 JSON 定义组或元素填充 ArrayList<ArrayList<Object>>(尝试在 Android 中为可扩展列表创建数据)

ruby-on-rails - 渲染 json 中的哈希火箭与冒号 :

javascript - 将数组的第一项连接到第二个数组 JavaScript 的第一项

sql - 客户端统计 SQL 中的试用列

sql-server - 在 SQL Server 2012+ 中选择连续时间段的最小开始时间和最大结束时间

azure - 在部署时查找 Functions 授权代码

json - 将同名的 XML 元素转换为同名的 JSON 属性

sql - 如何为组 SQL Server 分配一个 id

.net - 对于游戏服务器来说,最好的云计算平台是什么?