本指南介绍如何在 Fabric 中的数据工厂管道中使用参数。 这是使工作流更加灵活且更易于管理的简单方法。
如何在 Fabric 中的数据工厂管道中使用参数、表达式和函数
本指南逐步讲解如何在 Fabric 数据工厂中创建参数化管道的基础知识,并在此过程中使用明确的示例。 通过使用参数和动态表达式,可以节省大量时间并生成灵活的 ETL(提取、转换、加载)或 ELT(提取、加载、转换)解决方案。 这些技术减少了硬编码,有助于重复使用对象和流程,从而更轻松地维护管道并更快地推出新功能。
参数和表达式概念
可以使用参数将外部值传递到管道中。 设置参数后,它在整个运行过程中保持不变,无法更改。 通过使用参数,可以每次重复使用具有相同值的同一管道。 这些值可以单独使用或在表达式中使用,并且这些值可以在管道运行时被固定或计算。
表达式可以转到字符串值中的任何位置,并且始终返回另一个字符串值。 例如,如果使用 @password,管道会将密码视为参数。 如果值为表达式,只需删除 @ 即可获取实际内容。 如果需要一个以 @开头的字符串,只需键入 @@ 来转义它。 下面是一些示例,演示如何在实践中执行此作。
| 参数值 | Result |
|---|---|
| "parameters" | 返回字符“parameters”。 |
| "parameters[1]" | 返回字符“parameters[1]”。 |
| "@@" | 返回包含\“\@\”的、由 1 个字符构成的字符串。 |
| " @" | 返回包含 \“ \@ \”的、由 2 个字符构成的字符串。 |
如果使用称为字符串内插的功能(其中表达式封装在 @{ ... } 内),表达式还可以显示在字符串内。 例如,以下字符串包括参数值和文本字符串值:
“名字:@{pipeline().parameters.firstName} 姓氏:@{pipeline().parameters.lastName}”
使用字符串内插,结果始终是字符串。 例如,如果您将myNumber定义为42,并将myString定义为foo:
| 参数值 | Result |
|---|---|
| "@pipeline().parameters.myString" | 返回foo作为字符串。 |
| "@{pipeline().parameters.myString}" | 返回foo作为字符串。 |
| "@pipeline().parameters.myNumber" | 返回 42 作为一数字。 |
| "@{pipeline().parameters.myNumber}" | 返回 42 作为 字符串。 |
| "答案是: @{pipeline().parameters.myNumber}" | 返回字符串 Answer is: 42。 |
| “@concat('Answer is: ', string(pipeline(.parameters.myNumber))” | 返回字符串 Answer is: 42 |
| "答案是:@@{pipeline().parameters.myNumber}" | 返回字符串 Answer is: @{pipeline().parameters.myNumber}。 |
在表达式中使用参数的示例
创建和使用参数
若要创建参数,请选择管道编辑器画布的背景,然后选择底部属性窗口的“ 参数 ”选项卡。 选择“ + 新建 ”按钮以向管道添加新参数,为其指定名称、数据类型和默认值:
然后,可以在管道中支持动态内容的任意位置使用参数。 在此示例中,该参数用于在复制活动属性页的 “源 ”选项卡上动态提供 Lakehouse 数据存储的名称。
此时会显示 “添加动态内容 ”窗口,允许指定任何类型的动态内容,包括参数、 系统变量、 函数或管道变量。 在此示例中,已选择以前定义的参数,并且动态内容窗口会自动填充正确的表达式来引用参数。
如何参数化连接
要在管道中参数化连接,需要使用希望动态替换的连接 GUID。
- 在可以动态修改管道中的连接之前,必须获取要设置的连接的 GUID
- 转到“设置” |管理连接和网关
- 找到连接的名称,然后单击连接名称旁边的省略号
- 选择“设置”并复制连接 ID
- 使用字符串参数将 GUID 粘贴到该参数中,以便在动态表达式中使用
复杂表达式示例
以下示例演示引用活动输出的深层子字段的复杂示例。 若要引用计算结果为子字段的管道参数,请使用 [] 语法而不是 dot(.) 运算符(与子字段 1 和子字段 2 一样)
@activity('*activityName*').output.*subfield1*.*subfield2*[pipeline().parameters.*subfield3*].*subfield4*
动态内容编辑器
完成编辑后,动态内容编辑器会自动转义内容中的字符。 例如,内容编辑器中的以下内容是带有表达式函数的字符串内插:
@{toUpper('myData')}
动态内容编辑器将以前的内容转换为以下表达式:
MYDATA
在表达式中使用函数和变量
可以在表达式中调用函数并使用变量。 以下各节提供了有关可以在表达式中使用的函数的信息。
管道范围变量
可以在管道 JSON 中的任何位置引用这些系统变量。
| 变量名称 | Description |
|---|---|
| @pipeline().DataFactory | 在其中运行管道运行的数据工厂或 Synapse 工作区的名称 |
| @pipeline().Pipeline | 管道的名称 |
| @pipeline().RunId | 特定管道运行的 ID |
| @pipeline().TriggerId | 触发管道的触发器ID |
| @pipeline().TriggerName | 调用了管道的触发器的名称 |
| @pipeline().TriggerTime | 触发器运行调用管道的时间。 这是触发器实际触发以调用管道运行的时间,它可能与触发器的计划时间略有不同。 |
| @pipeline().GroupId | 管道运行所属组的 ID。 在 Microsoft Fabric 中,“组”是指可以共同管理的相关资源的集合。 组用于组织和控制对资源的访问,以便更轻松地管理权限并监视多个管道中的活动。 |
| @pipeline()?.由管道名称触发 | 触发管道运行的管道的名称。 当管道运行由 ExecutePipeline 活动触发时适用。 在其他情况下使用时计算结果为 Null。 注意 @pipeline() 后面的问号 |
| @pipeline()?.被触发的管道运行ID | 触发管道运行的管道的运行 ID。 当管道运行由 ExecutePipeline 活动触发时适用。 在其他情况下使用时计算结果为 Null。 注意 @pipeline() 后面的问号 |
Note
与触发器相关的日期/时间系统变量(在管道和触发器作用域内)以 ISO 8601 格式返回 UTC 日期,例如 2017-06-01T22:20:00.4061448Z。
字符串函数
若要使用字符串,可以使用这些字符串函数以及某些集合函数。 字符串函数仅适用于字符串。
| 字符串函数 | Task |
|---|---|
| concat | 组合两个或更多字符串,并返回组合后的字符串。 |
| endsWith | 检查字符串是否以指定的子字符串结尾。 |
| guid | 生成字符串形式的全局唯一标识符 (GUID)。 |
| indexOf | 返回子字符串的起始位置。 |
| lastIndexOf | 返回最后一次出现的子字符串的起始位置。 |
| replace | 将子字符串替换为指定的字符串,并返回更新的字符串。 |
| split | 根据原始字符串中指定的分隔符字符,从较大字符串中返回一个包含子字符串(以逗号分隔)的数组。 |
| startsWith | 检查字符串是否以特定的子字符串开头。 |
| substring | 返回字符串中的字符,从指定的位置开始。 |
| toLower | 返回小写格式的字符串。 |
| toUpper | 返回大写格式的字符串。 |
| trim | 从字符串中删除前导和尾随空格,并返回更新后的字符串。 |
集合函数
若要使用集合(通常是数组或字符串,有时是字典),可以使用这些集合函数。
| 收集功能 | Task |
|---|---|
| contains | 检查集合是否包含某个特定项。 |
| empty | 检查集合是否为空。 |
| first | 返回集合中的第一个项。 |
| intersection | 返回一个集合,其中仅包含各指定集合中的共同项。 |
| join | 返回一个字符串,其中包含某个数组中的所有项并以指定的分隔符分隔每个项。 |
| last | 返回集合中的最后一个项。 |
| length | 返回字符串或数组中的项数。 |
| skip | 将集合开头的项删除,并返回其余所有项目。 |
| take | 返回集合开头的项。 |
| union | 返回一个集合,其中包含指定集合中的所有项。 |
逻辑函数
这些函数可在条件中使用,并可用于评估任何类型的逻辑。
| 逻辑比较函数 | Task |
|---|---|
| and | 检查所有表达式是否为真。 |
| equals | 检查两个值是否相等。 |
| greater | 检查第一个值是否大于第二个值。 |
| greaterOrEquals | 检查第一个值是否大于或等于第二个值。 |
| if | 检查表达式为 true 还是 false。 根据结果返回指定的值。 |
| less | 检查第一个值是否小于第二个值。 |
| lessOrEquals | 检查第一个值是否小于或等于第二个值。 |
| not | 判断表达式是否为假。 |
| or | 检查是否至少一个表达式为真。 |
转换函数
这些函数用于在该语言的各个原生类型之间进行转换:
- 字符串
- 整数
- float
- boolean
- arrays
- dictionaries
| 转换函数 | Task |
|---|---|
| array | 从单个指定的输入返回数组。 对于多个输入,请参阅 createArray。 |
| base64 | 返回字符串的 base64 编码版本。 |
| base64ToBinary | 返回 base64 编码字符串的二进制版本。 |
| base64ToString | 返回 base64 编码字符串的字符串版本。 |
| binary | 返回输入值的二进制版本。 |
| bool | 返回输入值的布尔值版本。 |
| coalesce | 返回一个或多个参数中的第一个非 null 值。 |
| createArray | 从多个输入返回数组。 |
| dataUri | 返回输入值的数据 URI。 |
| dataUriToBinary | 返回数据 URI 的二进制版本。 |
| dataUriToString | 返回数据 URI 的字符串版本。 |
| decodeBase64 | 返回 base64 编码字符串的字符串版本。 |
| decodeDataUri | 返回数据 URI 的二进制版本。 |
| decodeUriComponent | 返回一个字符串,并将其中的转义字符替换为解码后的版本。 |
| encodeUriComponent | 返回一个字符串,并将其中的 URL 不安全字符替换为转义字符。 |
| float | 返回输入值的浮点数。 |
| int | 返回字符串的整数版本。 |
| json | 返回字符串或 XML 的 JavaScript 对象表示法 (JSON) 类型的值或对象。 |
| string | 返回输入值的字符串版本。 |
| uriComponent | 通过将 URL 不安全字符替换为转义字符来返回输入值的 URI 编码版本。 |
| uriComponentToBinary | 返回 URI 编码字符串的二进制版本。 |
| uriComponentToString | 返回 URI 编码字符串的字符串版本。 |
| xml | 返回字符串的 XML 版本。 |
| xpath | 检查 XML 中是否存在与 XPath(XML 路径语言)表达式匹配的节点或值,并返回匹配的节点或值。 |
数学函数
这些函数可用于以下任一数字类型:整数和浮点数。
| 数学函数 | Task |
|---|---|
| add | 返回两个数字相加的结果。 |
| div | 返回两个数字相除的结果。 |
| max | 返回一组数字或数组中的最大值。 |
| min | 返回一组数字或数组中的最小值。 |
| mod | 返回将两个数字相除后的余数。 |
| mul | 返回将两个数字相乘得到的乘积。 |
| rand | 返回指定范围内的随机整数。 |
| range | 返回以指定整数开头的一个整数数组。 |
| sub | 返回第一个数字减去第二个数字得到的结果。 |
日期函数
| 日期或时间函数 | Task |
|---|---|
| addDays | 给时间戳增加天数。 |
| addHours | 将小时数加到时间戳。 |
| addMinutes | 将分钟数加到时间戳。 |
| addSeconds | 将一定秒数添加到时间戳。 |
| addToTime | 将一定数量的时间单位加到时间戳上。 另请参阅 getFutureTime。 |
| convertFromUtc | 将时间戳从协调世界时 (UTC) 转换为目标时区。 |
| convertTimeZone | 将时间戳从源时区转换为目标时区。 |
| convertToUtc | 将时间戳从源时区转换为协调世界时 (UTC)。 |
| dayOfMonth | 返回时间戳中月份组成部分的日期。 |
| dayOfWeek | 返回时间戳中周组成部分的星期日期。 |
| dayOfYear | 返回时间戳中年组成部分的日期。 |
| formatDateTime | 以可选格式返回字符串形式的时间戳。 |
| getFutureTime | 返回当前时间戳加上指定的时间单位。 另请参阅 addToTime。 |
| getPastTime | 返回当前时间戳减去指定的时间单位。 另请参阅 subtractFromTime。 |
| startOfDay | 返回时间戳中的天的开始时间。 |
| startOfHour | 返回时间戳中的小时的开始时间。 |
| startOfMonth | 返回时间戳中的月份的开始时间。 |
| subtractFromTime | 从时间戳中减去一定数目的时间单位。 另请参阅 getPastTime。 |
| ticks | 返回指定时间戳的 ticks 属性值。 |
| utcNow | 返回字符串形式的当前时间戳。 |