在 ADF 上将列拆分为行

Splitting a column into rows on ADF

您好,我得到如下行。

ID, NAME,EMAIL,PHONENUMBER
123,ABC, qwe@poi.com|asd@lkj.com, 3636|7363
234,DEF,sjs@djd.com|sndir@fmei.com|cmrjje@fmcj.com,5845|4958|5959

每个人可以有多个电子邮件和 phone 个号码,以 | 分隔。第一封电子邮件和第一封 phone 已链接。第二封电子邮件和第二封 phone 已链接。所以他们需要在相同的记录中。我可以将此记录拆分为多行,每条记录一封电子邮件和一封 phone 吗?

我们需要使用数据流来实现。我创建了一个测试,整体架构和调试结果如下:

  1. 我的源数据集是 Azure 数据湖 gen2 中的一个文本文件。Source1Source2 使用相同的数据源。

  2. DerivedColumn1activity,我们可以selectEMAIL列并输入表达式split(EMAIL,'|')将此列拆分为数组。

  3. Flatten1 activity, select EMAIL[] as Unroll by and 展开根目录

  4. SurrogateKey1 activity,输入 ROW_NO 和起始值 1。 数据预览如下:

  5. Source2Source1一样,所以我们跳转到DerivedColumn2activity,我们可以selectPHONENUMBER列并输入表达式 split(PHONENUMBER,'|') 将此列拆分为数组。

  6. Flatten2 activity,select PHONENUMBER[] 作为 Unroll by 和 Unroll root。

  7. SurrogateKey2activity输入ROW_NO,起始值为1,数据预览如下:

  8. Join1activity处,我们可以用键列ROW_NO对这两个数据流进行Inner join。 数据预览如下:

  9. Select1activity,我们可以select我们需要的列。 数据预览如下:

  10. 然后我们就可以把结果sink到我们的目的地了

就这些了。