将嵌套数组映射到接收列 [英] Map Nested Array to Sink Columns

查看:15
本文介绍了将嵌套数组映射到接收列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在使用一个调查API来检索结果并将它们存储在我们的数据仓库(SQL数据库)中。结果以JSON对象的形式返回,该对象包括数组(&Quot;Submit&Quot;),其中包含每个人的响应。单独提交的内容包含一个数组(&Quot;Answers&Quot;),其中包含调查中问题的每个答案。

我希望每个提交都是一个表中的一行。

我将提供一些非常简单的数据示例,我只是在寻找解决此问题的一般方法。我当然不是在寻找一个完整的解决方案。

接口返回如下响应:

{
  "surveyName": "Sample Survey",
  "count": 2,
  "submissions": [
    {
      "id": 1,
      "created": "2021-01-01T12:00:00.000Z",
      "answers": [
        {
           "question_id": 1,
           "answer": "Yes"
        },
        {
           "question_id": 2,
           "answer": 5
        }
      ],
    },
    {
      "id": 2,
      "created": "2021-01-02T12:00:00.000Z",
      "answers": [
        {
           "question_id": 1,
           "answer": "No"
        },
        {
           "question_id": 2,
           "answer": 4
        }
      ],
    }
  ]
}
实际上,我想向一个SQL表中添加一行,其中的列是:ID、CREATED、Answer1、Answer2。在复制数据活动的Sink选项卡中,我不知道如何将答案映射到列Answer1。如果Quest_id=2,则将答案映射到Answer2列。&Quot;

我可能必须使用数据流来处理这种映射吗?如果是,您能想到该类型的流程中包含的一般步骤吗?

推荐答案

对于那些寻找类似解决方案的人,我将根据@mark-kromer-msft的建议发布我是如何解决此问题的大体想法。

首先,我在管道中获取JSON文件的部分不包括在内。为此,我必须使用Until循环来分页通过这个特定的端点,以获得所有提交结果。我使用复制数据活动在BLOB存储中为每个页面创建JSON文件。之后,我创建了一个数据流。

我必须首先展平提交数组,以便将每个提交分隔到单独的行。然后,我使用派生列将每个答案提取到单独的专栏中。看起来是这样的:

以下是一个表达式的示例:

find(submissions.answers, equals(#item.question_id, '1')).answer

最后,我只需在最后一步(Sink)中创建映射,就可以映射我的派生列。

这篇关于将嵌套数组映射到接收列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆