我有一个 Azure Blob 存储,我想在以下条件下将文件从“Container_Source”复制到“Container_Sink”:
我想复制以“Energy”开头并以“.zip”结尾的文件。示例文件名可以是“Energy_Payment_20231209110007_0000000404988124.zip”
还有,第一次复制,我想复制所有文件。
对于下一次运行,我只想复制新文件,即上次复制后到达的文件。事实上,我不想每次运行管道时都复制所有“Energy .... .zip”文件。
在 Azure 数据工厂中有什么方法可以实现这个目标吗?
为此,您需要在原始复制活动之后使用两个额外的临时文件和一个额外的复制活动。
第一次,要复制所有文件,请使用此方法并调试管道。
对于新加载的文件,
获取两个 csv 文件。一个是带有一个虚拟列和一行的空白文件,另一个 csv 文件应包含一列
curr_date
,其行值应为 your last pipeline run time
。
第一次需要手动输入该值。对于下一次运行,额外的复制活动将自动更新此值。
在 ADF 中为这两个数据集创建 csv 数据集,并将日期 csv 数据集提供给查找活动。
这将给出上述文件中的
curr_date
列,并在原始复制活动源设置中使用该值按上次修改过滤,如下所示。
@string(activity('Lookup1').output.firstRow.curr_date)
给出所需文件的通配符文件路径。使用您的目标二进制数据集作为接收器数据集。
此后,进行另一次复制活动,并将空白 csv 数据集作为源数据集。在源设置中使用附加列并指定
@utcNow()
作为动态内容。
将日期数据集作为此复制活动的目标数据集。
因此,在每次复制活动运行后,第二个复制活动将使用上次管道运行时间更新日期 csv 文件。对于下一次管道运行,我们将使用查找活动中的这段时间并过滤掉上次管道运行后加载的新文件。
这些是我的源文件和新加载的文件:
您只能看到复制到我的目标位置的新加载的文件。