读取 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:
- 使用
Get Metadata
activity,获取所有文件的列表。
(在源数据集中参数化源文件名,在数据集参数中传递'*'即可获取所有文件。)
获取元数据输出:
将获取元数据输出 子项 传递给 ForEach
activity.
@activity('Get Metadata1').output.childItems
- 在 ForEach 中添加
If Condition
activity 并添加 true case 表达式以仅将需要的文件复制到接收器。
@and(greater(int(substring(item().name,4,1)),4),lessOrEquals(int(substring(item().name,4,1)),7))
- 当If条件为真时,添加
copy data
activity将当前项目(文件)复制到sink。
来源:
接收器:
输出:
您始终可以按照@NiharikaMoola-MT 的建议进行操作。但由于您已经知道文件的范围 (5-7),我建议
- 声明两个参数作为上限和下限
- 创建一个 Foreach 循环并传递参数并创建一个范围[lowerlimit,upperlimit]
- 为源创建参数化数据集。
- 使用 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'))
方法略有不同,结果相似,这取决于您的需要。
我有要求说,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:
- 使用
Get Metadata
activity,获取所有文件的列表。
(在源数据集中参数化源文件名,在数据集参数中传递'*'即可获取所有文件。)
获取元数据输出:
将获取元数据输出 子项 传递给
ForEach
activity.@activity('Get Metadata1').output.childItems
- 在 ForEach 中添加
If Condition
activity 并添加 true case 表达式以仅将需要的文件复制到接收器。
@and(greater(int(substring(item().name,4,1)),4),lessOrEquals(int(substring(item().name,4,1)),7))
- 当If条件为真时,添加
copy data
activity将当前项目(文件)复制到sink。
来源:
接收器:
输出:
您始终可以按照@NiharikaMoola-MT 的建议进行操作。但由于您已经知道文件的范围 (5-7),我建议
- 声明两个参数作为上限和下限
- 创建一个 Foreach 循环并传递参数并创建一个范围[lowerlimit,upperlimit]
- 为源创建参数化数据集。
- 使用 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'))
方法略有不同,结果相似,这取决于您的需要。