【问题标题】:How to Map JSON data from a REST API to Azure SQL using Data Factory如何使用数据工厂将 JSON 数据从 REST API 映射到 Azure SQL
【发布时间】:2020-02-22 21:17:07
【问题描述】:

我在 azure 数据工厂中有一个新管道。 我创建了数据集,其中一个来自其余 api(公共的): https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=MSFT&apikey=demo

然后我创建了一个 azure sql 表,其中的列显示在屏幕截图中

问题是我不知道如何进行映射,因为这是一个复杂的 JSON 对象,我受限于 Mapping Designer:

如何映射日期?

【问题讨论】:

  • 你能告诉我们你期望的数据是什么吗?类似于您希望如何存储这些 json 数据?
  • 在第一个屏幕截图中,有表格列,id,stock,date和value,基本上就是这样。

标签: json azure azure-data-factory


【解决方案1】:

我倾向于对这些使用 ELT 方法,使用 Web 任务调用 REST API 并将 JSON 存储在 SQL 表中,然后使用 SQL 函数(如OPENJSON)分解 JSON。

示例管道:

使这种方法发挥作用的关键是存储过程参数上的表达式。这会从 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;

我的结果:

【讨论】:

    【解决方案2】:

    数据有结构吗?如果是这样,您可以生成一个虚拟文件,将其放在接收器中并进行一次性映射。如果没有,您可以查找文件,遍历 For Each 循环容器中的内容并将详细信息插入到 SQL 表中。

    例如

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

    要记住的重要一点是迭代正确的数组。如果不清楚,请告诉我。目前不在系统前,所以不能添加截图。

    【讨论】:

    • 上面的链接有子结构,并且在sql屏幕截图中也可以看到列,截图会有所帮助:),提前谢谢。
    猜你喜欢
    • 2023-03-07
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-26
    • 2020-05-28
    • 2020-04-14
    • 1970-01-01
    相关资源
    最近更新 更多