簡體   English   中英

如何使用數據工廠將 JSON 數據從 REST API 映射到 Azure SQL

[英]How to Map JSON data from a REST API to Azure SQL using Data Factory

我在 azure 數據工廠中有一條新管道。 我創建了數據集,一個來自其余 api(公共的): https : //www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=MSFT&apikey=demo

然后我創建了一個 azure sql 表,其中的列顯示在屏幕截圖中

在此處輸入圖片說明

問題是我不知道如何進行映射,因為這是一個復雜的 JSON 對象,我對 Mapping Designer 的限制:

我如何映射日期?

F

我傾向於對這些使用 ELT 方法,通過 Web 任務調用 REST API 並將 JSON 存儲在 SQL 表中,然后使用 SQL 函數(如OPENJSON )分解 JSON。

示例管道:

ADF 管道示例

使這種方法起作用的關鍵是存儲過程參數上的表達式。 這會從 Web 任務中獲取整個 JSON 輸出並將其傳遞給 proc。 這是一個簡單的日志記錄過程,它將記錄插入到日志記錄表中:

@string(activity('Web1').output)

我登錄到一個表,然后粉碎 JSON 或者你可以直接在存儲的 proc 參數上使用OPENJSON ,例如

--INSERT INTO ...
SELECT
    CAST( [key] AS DATE ) AS timeSeriesDate,
    JSON_VALUE ( x.[value], '$."1. open"' ) AS [open],
    JSON_VALUE ( x.[value], '$."2. high"' ) AS [high],
    JSON_VALUE ( x.[value], '$."3. low"' ) AS [low],
    JSON_VALUE ( x.[value], '$."4. close"' ) AS [close],
    JSON_VALUE ( x.[value], '$."5. volume"' ) AS [volume]

FROM dbo.myLog
    CROSS APPLY OPENJSON(logDetails , '$."Time Series (Daily)"' ) x
--WHERE logId = 23333;

我的結果:

我的結果

數據有結構嗎? 如果是這樣,您可以生成一個虛擬文件,將其放入接收器並進行一次映射。 如果沒有,您可以查找文件,遍歷 For Each 循環容器中的內容並將詳細信息插入 SQL 表。

例如

insert <<your table>> 
select '@item().name', '@item().address.city', @item().value

要記住的重要一點是迭代正確的數組。 如果不清楚,請告訴我。 現在不在系統前,所以無法添加屏幕截圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM