Compartir a través de

映射数据流中的派生列转换

适用于:Azure 数据工厂 Azure Synapse Analytics

数据流在 Azure 数据工厂和 Azure Synapse 管道中均可用。 本文适用于映射数据流。 如果不熟悉转换,请参阅介绍性文章使用映射数据流转换数据

使用派生列转换在数据流中生成新列或修改现有字段。

创建和更新列

创建派生列时,可以生成新列或更新现有列。 在“列”文本框中,输入要创建的列。 若要替代架构中的现有列,可以使用“列”下拉列表。 若要生成派生列的表达式,请单击“输入表达式”文本框。 你可以开始键入表达式或打开表达式生成器来构造逻辑。

派生列设置

若要添加更多派生列,请单击列列表上方的“添加”或现有派生列旁边的加号图标。 选择“添加列”或“添加列模式”。

新派生列选择

列模式

如果未显式定义架构,或者你想要批量更新一组列,则需要创建列模式。 列模式让你可以使用基于列元数据的规则与列匹配,并为每个匹配列创建派生列。 如需了解更多信息,请参阅在派生列转换过程中如何生成列模式

列模式

使用表达式生成器生成架构

使用映射数据流表达式生成器时,可以在“派生列”部分中创建、编辑和管理派生列。 系统将列出转换过程中创建或更改的所有列。 你可以单击列名称,以交互方式选择要编辑的列或模式。 若要添加其他列,请选择“新建”,并选择是否要添加单个列或模式。

新建列

使用复杂列时,可以创建子列。 要创建子列,请单击任意列旁边的加号图标,然后选择“添加子列”。 有关处理数据流中的复杂类型的详细信息,请参阅映射数据流中的 JSON 处理

添加子列

有关处理数据流中的复杂类型的详细信息,请参阅映射数据流中的 JSON 处理

添加复杂列

数据流脚本

语法

<incomingStream>
    derive(
           <columnName1> = <expression1>,
           <columnName2> = <expression2>,
           each(
                match(matchExpression),
                <metadataColumn1> = <metadataExpression1>,
                <metadataColumn2> = <metadataExpression2>
               )
          ) ~> <deriveTransformationName>

示例

下面的示例是一个名为 CleanData 的派生列,它接受传入的流 MoviesYear 并创建两个派生列。 第一个派生列将列 Rating 替换为整数类型的 Rating 值。 第二个派生列是与名称以“movies”开头的每个列匹配的模式。 对于每个匹配列,它会创建列 movie,该列等于前缀为“movie_”的匹配列的值。

在 UI 中,此转换如下图所示:

派生示例

此转换的数据流脚本位于下面的代码片段中:

MoviesYear derive(
                Rating = toInteger(Rating),
		        each(
                    match(startsWith(name,'movies')),
                    'movie' = 'movie_' + toString($$)
                )
            ) ~> CleanData