【问题标题】:Azure-data-Factory Copy data If a certain file existsAzure-data-Factory 复制数据 如果某个文件存在
【发布时间】:2020-06-18 16:24:08
【问题描述】:

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

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

请看下面我的图

【问题讨论】:

    标签: azure-data-factory azure-data-factory-2


    【解决方案1】:

    我认为我对您的要求的理解有所不同。

    我只想在 blob 容器上存在某个文件(例如 SRManifest.csv)时运行存储过程

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

    2 跟随一个 IF 活动,使用这个条件:

    3 将你的 sp 放入 IF 活动的 True 部分

    如果您还需要将文件列表传递给 sp,那么您需要在 IF-True 活动中使用 GetMetadata with childitems 选项

    【讨论】:

    • 感谢你们(@Jason Welch 和 @Joel Cochran)的贡献。你是对的。通过使用“验证”功能,我找到了一种更简单的方法,无需编写脚本。在我的情况下,这三种方法都可以使用。
    • 这是一个很好的方法@JasonWelch - 我将问题解读为“我需要处理所有文件,如果存在这个文件,请执行 SPROC。如果我只需要运行 SPROC,因为存在文件,那么这是一个更好的选择。
    【解决方案2】:

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

    在 ForEach 活动内部,如果值仍然是 false,您只想尝试设置变量,如果找到 blob 名称,请将其设置为 true .由于 Set Variable 不能是自引用的,因此请在 If 活动的 False 分支中执行此操作:

    这只会在值为 false 时尝试处理(因此尚未找到文件名),如果值为 true 则不会执行任何操作。现在根据您的文件名设置变量:

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

    当您执行管道时,您将看到 Set Variable 一旦值设置为 true 就会停止尝试:

    在主管道中,在 ForEach 活动完成后,您可以使用该变量来设置最终 If 活动的条件。如果永远找不到 blob,它仍然是 false,所以将存储过程活动放在 True 分支中。

    【讨论】:

      猜你喜欢
      • 2019-08-27
      • 1970-01-01
      • 2015-12-05
      • 1970-01-01
      • 1970-01-01
      • 2019-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多