Azure 数据工厂 V2:可选参数

Azure Data Factory V2: Optional parameters

我正在使用 ADFv2,我想使用一些在数据集级别定义的可选参数。我没有发现是否可以实现。

如果我在数据集中定义一个参数(在管道级别定义一个参数并将两者连接以便管道将值传递给数据集级别的参数),当我手动 运行 管道时并且不指定值我收到错误

No value provided for Parameter 'parameter'

如果不为参数指定值,您会期望什么? 如果该参数有默认值,则可以在定义参数时指定默认值。 "parameters": { "parameter1": { "type": "String", "defaultValue": "defaultValue1" } }

仅供可能想要做类似事情的任何人使用。至少在今天之前,我们不能为管道提供可选参数,这是根据 ADF 产品团队通过 Azure 中的支持票告诉我的设计。

@fgbaezp,这是一个迟到的答案,但您可以使用动态内容将空字符串分配给参数,例如 @toLower('')

我们有一个 blob csv 文件的数据集。数据集参数化了文件名,以及容器和目录。

当这个数据集是一个接收器时,我们可能想要指定要写入的文件,或者将其留空并让 Azure 为我们提供 data_xxxx.csv 个文件名。

当这个数据集是一个源时,我们可能想要指定打开哪个文件,或者将其留空以使用通配符选项(目录中的所有 csv)。

在这种有限的意义上,我们希望文件名参数是可选的。

但是您不能在 UI 中将数据集参数字段留空,否则管道将无法编译(验证)。

在我们希望文件名为空的情况下,我们使用上面建议的技巧注入空字符串(我们使用 @coalesce(pipeline().parameters.filename,'')并在触发管道时将文件名参数留空。

我最近 运行 关注这个问题,这里提供的答案并没有完全满足我的需求。我们使用 ADF 管道的方式依赖于要设置的参数,如果您需要手动 运行 或者如果被触发器 运行 为空,以便它们可以动态设置为date/time 触发器被激活。

在我们的管道中,我们有如下检查。

@if(empty(string(pipeline().parameters.FolderDate)),
formatDateTime(utcnow(),'yyyyMMdd'),
pipeline().parameters.FolderDate)

事实证明,如果您将参数作为小写 null 提供,那么我的管道将按预期工作。

尝试 @coalesce(null) 作为参数的表达式。

您可以使用 ? 而不是 @coalesce 如果为空 return null,则可以使用 @dataset()?.fileName。 “defaultValue”:您可以填写 @null[] 或更好的 @''。数据工厂和 Synapse Analytics 交叉传递参数需要一些输入来验证管道。

Null Values Sample

If Null return null

解决方法是在动态内容中使用合并并将参数留空。

ex: @coalesce(pipeline().parameters.parametername,'') 在动态内容中

https://docs.microsoft.com/en-us/azure/data-factory/control-flow-expression-language-functions#coalesce