ADF管道中如何通过U-SQL生成输出参数实现ADLS文件存在性分支处理
在ADF中通过U-SQL活动生成文件存在性标记输出参数
我刚好做过类似的场景,这就给你一步步拆解怎么实现:
1. 编写U-SQL脚本检测文件存在性
首先你需要写一段U-SQL代码,用来检查ADLS里的目标文件是否存在,然后输出一个标记值(比如1代表存在,0代表不存在)。这里我们把结果输出到一个临时CSV文件,方便ADF后续读取:
DECLARE @FilePath string = "/your/adls/path/targetfile.csv"; // 检查文件是否存在并生成标记 @fileExists = SELECT CASE WHEN EXISTS(@FilePath) THEN 1 ELSE 0 END AS FileExistsFlag FROM (SELECT * FROM (VALUES (1)) AS T(C)); // 将结果输出到临时文件 OUTPUT @fileExists TO "/temp/file_exists_flag.csv" USING Outputters.Csv(quoting:false);
提示:临时文件路径可以用ADLS的临时目录,后续可以删掉,只是用来传递标记值。
2. 配置U-SQL活动的输出数据集
在ADF的U-SQL活动中,指定一个输出数据集,指向刚才脚本里输出的临时CSV文件。数据集格式设为CSV,确保列名和U-SQL里的FileExistsFlag完全一致。
3. 提取U-SQL活动的输出参数
进入U-SQL活动的输出选项卡,添加一个输出参数,用表达式读取临时文件里的标记值:
@activity('你的U-SQL活动名称').output.firstRow.FileExistsFlag
因为我们的U-SQL只输出了一行数据,所以用
firstRow直接取第一行的FileExistsFlag列值就行。
4. 用IF条件活动分支执行逻辑
现在就可以在IF条件活动里用这个参数做判断:
- 当参数等于
1时,执行复制数据活动 - 当参数等于
0时,执行发送电子邮件活动
IF条件的表达式示例:
@equals(activity('你的U-SQL活动名称').output.firstRow.FileExistsFlag, 1)
额外小技巧
- 管道执行完成后,可以加一个删除活动把临时CSV文件删掉,避免占用存储空间。
- 如果不想生成临时文件,也可以考虑用U-SQL的自定义程序集输出结果,但临时文件的方式对新手更友好,配置成本更低。
内容的提问来源于stack exchange,提问作者FelipePerezR
相关产品推荐
相关产品推荐

