Microsoft Fabric 中的数据工厂的参数

本指南介绍如何在 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。

  1. 在可以动态修改管道中的连接之前,必须获取要设置的连接的 GUID
  2. 转到“设置” |管理连接和网关
  3. 找到连接的名称,然后单击连接名称旁边的省略号
  4. 选择“设置”并复制连接 ID
  5. 使用字符串参数将 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 返回字符串形式的当前时间戳。