【发布时间】:2021-10-10 20:16:13
【问题描述】:
我正在 Azure 数据工厂中转换数据 我有一个包含如下数据的源文件:
ABC 代码-01
DEF
GHI
JKL 代码-02
移动运营商
我需要让接收器文件中的数据看起来像这样:
ABC 代码-01
DEF 代码-01
GHI 代码-01
JKL 代码-02
MNO 代码-02
【问题讨论】:
标签: azure azure-functions azure-data-factory-2
我正在 Azure 数据工厂中转换数据 我有一个包含如下数据的源文件:
ABC 代码-01
DEF
GHI
JKL 代码-02
移动运营商
我需要让接收器文件中的数据看起来像这样:
ABC 代码-01
DEF 代码-01
GHI 代码-01
JKL 代码-02
MNO 代码-02
【问题讨论】:
标签: azure azure-functions azure-data-factory-2
您可以使用 Azure 数据工厂中提供的 Fill down 概念来实现此目的。代码 sn-p 可用here。
注意:代码 sn-p 假设您已经在数据流中添加了源转换。
步骤:
source1 派生(dummy = 1) ~> DerivedColumn DerivedColumn keyGenerate(输出(sk as long), startAt: 1L) ~> SurrogateKey SurrogateKey 窗口(over(dummy), asc(sk, 真), Rating2 = coalesce(Rating, last(Rating, true()))) ~> Window1
在脚本中添加代码后,数据流产生3次变换
一个。 派生列转换为新的虚拟列,常数为“1”
b. SurrogateKey 转换为从值 1 开始的每一行生成 Key 值。
c。 窗口转换以执行基于窗口的聚合。此处代码添加预定义子句last(),如果当前行值为NULL,则取上一行不是空值。
有关窗口转换的更多信息,请参阅 - https://docs.microsoft.com/en-us/azure/data-factory/data-flow-window
如果列值为空白,则替换为 NULL 值。如果为空,last() 子句将不会识别为 NULL 来替换之前的值。
case(length(dropLeft(Column_1,4)) >1, dropLeft(Column_1,4), toString(null()))
派生列预览:Column_1是Source原始数据,dummy是代码sn-p加常数1生成的列,Column1Left & Column1Right是存储拆分后的值(Column_1 ) 原始数据。
注意:Column1Right 空白值替换为 NULL。
一个。 Over – 这会根据提供的列对源数据进行分区。由于没有其他列可用作分区列,因此添加使用派生列生成的虚拟列。
b. Sort – 根据排序列对源数据进行排序。添加代理键列以对传入的源数据进行排序。
c。 Window Column – 在这里,仅当当前值为 Null 时,提供表达式以从先前的行中复制非 Null 值
coalesce(Column1Right, last(Column1Right,true()))
d。窗口变换的数据预览:这里将Column1Right数据的Null值根据Window Columns中添加的表达式替换为之前的非Null值。
concat Column1Left 和 Column1Right。第二个派生列预览:
【讨论】: