读取 adf 管道中的特定文件名

read specific files names in adf pipeline

我有要求说,blob 存储有多个名称为 file_1.csv、file_2.csv、file_3.csv、file_4.csv、file_5.csv、[= 的文件20=],file_7.csv。从这些我必须只读取从 5 到 7 的文件名。

我们如何在 ADF/Synapse 管道中实现这一目标。

我已经在我的实验室重现了,请看下面的重现步骤。

ADF:

  1. 使用 Get Metadata activity,获取所有文件的列表。

(在源数据集中参数化源文件名,在数据集参数中传递'*'即可获取所有文件。)

获取元数据输出:

  1. 将获取元数据输出 子项 传递给 ForEach activity.

    @activity('Get Metadata1').output.childItems

  1. 在 ForEach 中添加 If Condition activity 并添加 true case 表达式以仅将需要的文件复制到接收器。

@and(greater(int(substring(item().name,4,1)),4),lessOrEquals(int(substring(item().name,4,1)),7))

  1. 当If条件为真时,添加copy data activity将当前项目(文件)复制到sink。

来源:

接收器:

输出:

您始终可以按照@NiharikaMoola-MT 的建议进行操作。但由于您已经知道文件的范围 (5-7),我建议

  1. 声明两个参数作为上限和下限
  2. 创建一个 Foreach 循环并传递参数并创建一个范围[lowerlimit,upperlimit]
  3. 为源创建参数化数据集。
  4. 使用 FE 循环中的 fileNumber 创建动态表达式,例如

@concat('file',item(),'.csv')

我使用过滤器 activity 和 endsWith 函数采取了稍微不同的方法:

过滤器表达式为:

@or(or(endsWith(item().name, '_5.csv'),endsWith(item().name, '_6.csv')),endsWith(item().name, '_7.csv'))

方法略有不同,结果相似,这取决于您的需要。