你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将映射数据流参数化

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

提示

试用 Microsoft Fabric 中的数据工厂,这是一种适用于企业的一站式分析解决方案。 Microsoft Fabric 涵盖从数据移动到数据科学、实时分析、商业智能和报告的所有内容。 了解如何免费开始新的试用

Azure 数据工厂和 Synapse 管道中的映射数据流支持使用参数。 定义数据流定义内的参数并在整个表达式中使用它们。 参数值由调用管道通过“执行数据流”活动设置。 你可以使用三个选项来设置数据流活动表达式中的值:

  • 使用管道控制流表达式语言来设置动态值
  • 使用数据流表达式语言来设置动态值
  • 使用任一表达式语言来设置静态文本值

使用此功能可以使数据流具有通用性、灵活性和可重用性。 可以使用这些参数将数据流设置和表达式参数化。

在映射数据流中创建参数

若要将参数添加到数据流,请单击数据流画布的空白部分,查看常规属性。 在设置窗格中,你将看到名为“参数”的选项卡。 选择“新建”,生成新参数。 对于每个参数,必须分配名称,选择类型,然后根据需要设置默认值。

Screenshot of create Data Flow parameters.

在映射数据流中使用参数

可以在任意数据流表达式中引用参数。 参数以 $ 开头,并且不可改变。 可以在“参数”选项卡下表达式生成器内找到可用参数的列表

Screenshot shows the available parameters in the Parameters tab.

可以通过选择“新建参数”并指定名称和类型来快速添加更多参数。

Screenshot shows the parameters in the Parameters tab with new parameters added.

在映射数据流中使用参数化链接服务

参数化链接服务可用于映射数据流(适用于数据集或内联源类型)。

对于内联源类型,链接服务参数在管道中的数据流活动设置中公开,如下所示。

Screenshot shows the use of linked service parameters in the data flow.

对于数据集源类型,链接的服务参数直接在数据集配置中公开。

从管道分配参数值

使用参数创建数据流后,可以通过“执行数据流活动”从管道执行该数据流。 将活动添加到管道画布后,活动的“参数”选项卡中将显示可用的数据流参数

分配参数值时,可以根据 Spark 类型使用管道表达式语言数据流表达式语言。 所有映射数据流都可以具有管道和数据流表达式参数的任意组合。

Screenshot shows the Parameters tab with Data Flow expression selected for the value of myparam.

管道表达式参数

使用管道表达式参数,可以引用系统变量、函数、管道参数以及类似于其他管道活动的变量。 单击“管道表达式”可打开侧导航栏,可以通过该导航栏使用表达式生成器输入表达式。

Screenshot shows the expression builder pane.

引用管道参数时,系统将计算该参数的值,然后在数据流表达式语言中使用其值。 管道表达式类型不需要与数据流参数类型匹配。

字符串文本与表达式

分配字符串类型的管道表达式参数时,默认情况下将添加引号,并将值作为文本评估。 若要将参数值作为数据流表达式读取,请勾选参数旁的表达式框。

Screenshot shows the Data flow parameters pane Expression selected for a parameter.

对于数据流参数,stringParam 引用值为 upper(column1) 的管道参数。

  • 如果勾选了表达式,$stringParam 的计算结果为 column1 的值(全部大写)。
  • 如果未选中表达式(默认行为),则 $stringParam 的计算结果为 'upper(column1)'

传入时间戳

在管道表达式语言中,pipeline().TriggerTime 等系统变量和 utcNow() 等函数以“yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ”格式的字符串形式返回时间戳。 若要将其转换为时间戳类型的数据流参数,请使用字符串内插在 toTimestamp() 函数中加入所需时间戳。 例如,若要将管道触发时间转换为数据流参数,可以使用 toTimestamp(left('@{pipeline().TriggerTime}', 23), 'yyyy-MM-dd\'T\'HH:mm:ss.SSS')

Screenshot shows the Parameters tab where you can enter a trigger time.

注意

数据流最多支持表示 3 毫秒的数字。 left() 函数用于裁剪超出部分的数字。

管道参数示例

假设整数参数 intParam 引用字符串类型的管道参数 @pipeline.parameters.pipelineParam

Screenshot shows the Parameters tab with parameters named stringParam and intParam.

在运行时为 @pipeline.parameters.pipelineParam 分配值 abs(1)

Screenshot shows the Parameters tab with the value of a b s (1) selected.

在派生列等表达式中引用 $intParam 时,它将计算 abs(1) 的结果,并返回 1

Screenshot shows the columns value.

数据流表达式参数

选择“数据流表达式”可打开数据流表达式生成器。 你将能够在整个数据流中引用函数、其他参数和任何已定义的架构列。 在引用此表达式时,系统将计算其值。

注意

如果传入的表达式无效,或引用该转换中不存在的架构列,则参数的计算结果为 null。

以参数的形式传入列名

通常将列名作为参数值传入。 如果在数据流架构中定义了列,则可以直接将其作为字符串表达式引用。 如果未在架构中定义列,请使用 byName() 函数。 请记住使用 toString() 等转换函数将列转换为适当的类型。

例如,如果要基于参数 columnName 映射字符串列,可以添加派生列转换 toString(byName($columnName))

Passing in a column name as a parameter

注意

数据流表达式不支持字符串内插(替换字符串中的变量)。 而是将表达式连接为字符串值。 例如: 'string part 1' + $variable + 'string part 2'