[英]How to map a nested JSON objects to a SQL Server table using Azure Data Factory pipelines
I called a REST API and retrieved the result and placed it in Azure blob storage as a JSON file (all this using Copy data activity from Azure Data Factory). I called a REST API and retrieved the result and placed it in Azure blob storage as a JSON file (all this using Copy data activity from Azure Data Factory).
{"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}}
Now I would like to use the same pipeline to connect to a table in SQL Server with the following format.现在我想使用相同的管道连接到 SQL Server 中的表,格式如下。
base根据 | date日期 | CURR_KEY CURR_KEY | CURR_VALUE CURR_VALUE |
---|---|---|---|
EUR欧元 | 2021-04-15 2021-04-15 | AED自动体外除颤器 | 4.395136 4.395136 |
EUR欧元 | 2021-04-15 2021-04-15 | AFN AFN | 92.798516 92.798516 |
EUR欧元 | 2021-04-15 2021-04-15 | ALL全部 | 123.01053 123.01053 |
EUR欧元 | 2021-04-15 2021-04-15 | AMD AMD | 623.68381 623.68381 |
EUR欧元 | 2021-04-15 2021-04-15 | UAH UAH | 33.449108 33.449108 |
EUR欧元 | 2021-04-15 2021-04-15 | UGX UGX | 4330.311325 4330.311325 |
EUR欧元 | 2021-04-15 2021-04-15 | USD美元 | 1.196623 1.196623 |
The challenge here is to parse the nested JSON object "rates" and place it in the table as shown above through ADF pipeline.这里的挑战是解析嵌套的 JSON object “rates”,并通过 ADF 管道将其放置在如上所示的表中。 Any ideas on how to solve this?关于如何解决这个问题的任何想法?
Update: I have posted a question recently asking how to parse the above JSON using a SQL query.更新:我最近发布了一个问题,询问如何使用 SQL 查询解析上述 JSON。 The reason I posted this one is to look for answers which solve the aforementioned problem only by using ADF GUI instead of creating a stored procedure.我发布这篇文章的原因是寻找仅通过使用 ADF GUI 而不是创建存储过程来解决上述问题的答案。
First, create a Stored procedure in SQL Server.首先,在 SQL 服务器中创建一个存储过程。 Then use Lookup activity in ADF to get the data of JSON file.然后使用 ADF 中的 Lookup 活动来获取 JSON 文件的数据。 Finally, create a Stored procedure activity and pass the Lookup activity's output as parameter.最后,创建一个存储过程活动并将 Lookup 活动的 output 作为参数传递。
Details:细节:
Expression in Stored procedure activity: @{activity('Lookup1').output.value[0]}
存储过程活动中的表达式: @{activity('Lookup1').output.value[0]}
Stored procedure code(use the answer from your previous question):存储过程代码(使用上一个问题的答案):
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
;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.