我调用了 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 中具有以下格式的表。
这里的挑战是解析嵌套的 JSON 对象“rates”,并通过 ADF 管道将其放置在表中,如上所示。关于如何解决这个问题有什么想法吗?
更新: 我发布了question recently询问如何使用 SQL 查询解析上述 JSON。我发布此文章的原因是寻找仅通过使用 ADF GUI 而不是创建存储过程来解决上述问题的答案。
最佳答案
首先,在 SQL Server 中创建一个存储过程。然后使用 ADF 中的 Lookup 事件来获取 JSON 文件的数据。最后,创建一个存储过程事件并将 Lookup 事件的输出作为参数传递。
详细信息:
存储过程事件中的表达式:@{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/