代码之家  ›  专栏  ›  技术社区  ›  Mohammad

如何使用Azure数据工厂将新文件从blob存储容器复制到另一个容器?

  •  0
  • Mohammad  · 技术社区  · 2 年前

    我有一个Azure blob存储,我想在以下条件下将文件从“Container_Source”复制到“Container_Sink”:

    我想复制以“Energy”开头,以“.zip”结尾的文件。示例文件名可以是“Energy_Payment_20231209110007_ 0000000 404988124.zip”

    此外,第一次复制时,我想复制所有文件。

    对于接下来的运行,我只想复制新文件,即上次复制后到达的文件。事实上,我不想每次运行管道时都复制所有的“Energy….zip”文件。

    有什么方法可以在Azure数据工厂中实现这一目标吗?

    0 回复  |  直到 2 年前
        1
  •  1
  •   Rakesh Govindula    2 年前

    为此,您需要在原始复制活动之后使用两个额外的临时文件和一个额外的复制活动。

    第一次,要复制所有文件,请使用此 method 并调试管道。

    对于新加载的文件,

    • 取两个csv文件。一个是包含一个伪列和一行的空白文件,另一个csv文件应包含一列 curr_date 其行值应为 your last pipeline run time .

      enter image description here

    • 您需要第一次手动给定此值。对于接下来的运行,额外的复制活动将自动更新此值。

      enter image description here

    在ADF中为这两个创建csv数据集,并将日期csv数据集提供给查找活动。

    enter image description here

    这将给 当前日期 列,并在原始副本活动源设置中使用此值 按上次修改筛选 如下所示。

    @string(activity('Lookup1').output.firstRow.curr_date)
    

    enter image description here

    为所需文件提供通配符文件路径。使用目标二进制数据集作为汇点数据集。

    之后,进行另一个复制活动,并将空白的csv数据集作为源数据集。在源设置中使用附加列并给出 @utcNow() 作为动态内容。

    enter image description here

    将日期数据集作为此复制活动的目标数据集。

    enter image description here

    因此,在每次复制活动运行后,第二次复制活动将使用上次管道运行时间更新日期csv文件。对于下一次管道运行,我们将使用查找活动中的这段时间,并过滤掉上次管道运行后加载的新文件。

    这些是我的源文件和新加载的文件:

    enter image description here

    您只能看到新加载的文件被复制到我的目标位置。

    enter image description here