我创建了一个 azure 数据工厂管道,使用复制数据事件将数据从一个 adls 容器复制到另一个 adls 容器。 此复制事件将使用存储事件触发器来触发。
因此,每当生成新文件时,都会触发该事件。
源文件位于嵌套目录结构中,该结构具有动态文件夹,例如年、月和日,这些文件夹根据日期而变化。
在触发器中,我提到了固定文件夹路径之前的路径,但我不知道应该为动态路径设置什么值。
最初,我提供了诸如my/fixed/directory/*/*/*/
之类的路径,
但在执行时,它抛出异常“PathNotFound”。
最佳答案
- 存储事件触发器中的
blob 路径开头为
或blob 路径结尾为
不支持通配符。 - 但是,在固定父目录上创建存储事件触发器也会触发在子目录中创建/删除的任何文件的管道。
- 假设我的文件夹结构如下所示,其中
input/folder/2022
是我的固定目录(输入是容器名称)。我还在下面所示的每个文件夹中都有子文件夹。
- 现在,我已经创建了一个复制数据事件。源数据集的文件夹名称和文件名动态内容如下所示(参数值将从管道传递):
folder path: @replace(dataset().folder_name,'input/','')
file name: @dataset().file_name
- 接收器数据集的文件夹名称和文件名动态内容如下所示。这是一个名为
data
的不同容器:
folder path: @concat('output/',replace(dataset().folder,'input/folder/',''))
file name: @dataset().file
- 完成复制事件配置后,创建存储事件触发器。
- 此处,管道参数
folderName
和fileName
的值将在创建触发器时设置,如下所示:
fileName : @triggerBody().fileName
folderName : @triggerBody().folderPath
- 附加触发器并创建管道后,每当任何文件上传到固定目录
folder/2022
内的任何文件夹时,管道都会被触发。 - 我已将文件上传到
folder/2022/03/01/sample1.csv
。这成功触发了管道。
- 文件也已成功复制。以下为引用图片:
因此,仅为父目录创建存储事件触发器就足以触发上传到子目录的任何文件的管道。
关于Azure数据工厂: Dynamic path value for the Storage Event Trigger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75159338/