Synapse 管道 - 从通配符文件路径中提取实际文件名

问题描述 投票:0回答:1

我们每周随机将一个文件放入 ADLG2 BLOB 存储中。文件格式为 YYYYMMDD_WLS.csv。我正在使用带有一些数据流和复制操作的简单突触管道。我在数据集文件路径中使用 *WLS.csv 拾取和提取文件没有问题,但当我拉动元数据 itemName 时,它返回 *WLS.csv 而不是它处理的实际文件名,如 20231220_WLS.csv。我需要稍后使用原始文件名将其复制到存档并附加后处理时间戳。我还尝试将文件名留空并返回子项,但即使只有一个文件,也会返回一堆附加字符。

如何检索实际文件名,然后存储在下游使用的参数或变量中?

提前致谢!

我看到另一篇文章使用一堆嵌套的 REPLACE 函数来提取名称,但是读起来有点麻烦,而且客户端不会喜欢它。

子项输出:

"variableName": "OriginalFileName",
"value": "[{\"name\":\"20231220_WLS.csv\",\"type\":\"File\"}]"
azure-data-factory wildcard azure-synapse apache-synapse
1个回答
0
投票

您可以使用以下方法通过“获取元数据”活动使用通配符路径来获取文件名:

如果您的目录中只有一个文件,您可以按照以下步骤操作:

在数据集中,创建一个名为

fileName
的参数,其表达式为
*WLS.csv
,并将其用作动态表达式
@dataset().fileName
的文件名,如下所示:

enter image description here

在“获取元数据”活动中,创建

child items
作为字段列表,如下所示:

enter image description here

您将获得如下元数据活动输出:

enter image description here

添加“设置变量”活动,创建字符串类型变量,并添加

@activity('Get Metadata1').output.childItems[0].name
动态表达式以获取文件名。

enter image description here

您将得到如下所示的输出:

enter image description here

如果目录中有多个文件,请使用顺序活动

ForEach
和项目的动态表达式
@activity('Get Metadata1').output.childItems
将文件名存储到变量中。在
ForEach
内部,添加“设置变量”活动,创建字符串类型变量,并添加
@item().Name
动态表达式以获取文件名。

enter image description here

调试管道,每个文件名都会存储在一个变量中,如下所示:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.