Azure-data-Factory 复制数据 如果某个文件存在

Azure-data-Factory Copy data If a certain file exists

我在 blob 容器中有很多文件。但是,我只想 运行 一个存储过程,只有当某个文件(例如 SRManifest.csv)存在于 blob 容器上时。我在数据工厂上使用了获取元数据和 IF 条件。你能帮我写动态脚本吗?我试过这个 @bool(startswith( activity('Get Metadata1').output.childitems.ItemName, 'SRManifest.csv'))。没用。

然后我想,如果我使用 @greaterOREquals(activity('Get Metadata1').output.LastModified,adddays(utcnow(),-2))但是这会检查 Bloob 的 2 天内最后修改的文件不存在。谢谢。

请看下面我的图

根据您的图表,由于您已经遍历所有 blob 名称,您可以向管道添加一个布尔变量并将其默认值设置为 false:

在 ForEach activity 中,如果值仍然是 false,您只想尝试设置变量,如果找到 blob 名称,则设置它。由于 Set Variable 不能自引用,因此在 If activity:

的 False 分支内执行此操作

只有当值为false时才会尝试处理(所以文件名还没有找到),如果值为[=34=则什么都不做]真。现在根据您的文件名设置变量:

[注意:该值可以硬编码、参数化或基于变量]

执行管道时,一旦值设置为 true:

,您将看到设置变量停止尝试

在主管道中,在ForEach activity 完成后,您可以使用变量来设置最终If activity 的条件。如果从未找到 blob,它仍将是 false,因此将存储过程 activity 放在 True 分支中。

我对你的要求有不同的理解。

我想 运行 仅当特定文件(例如 SRManifest.csv)存在于 blob 容器上时才使用存储过程

1 更改您的元数据 activity 以查找标记文件 (SRManifest.csv)

是否存在

2 跟一个 IF activity,使用这个条件:

3 将你的 sp 放在 IF 的 True 部分 activity

如果您还需要传递给 sp 的文件列表,那么您将需要 IF-True 中的 GetMetadata with childitems 选项 activity