GetMetadata获取Azure数据工厂中的完整文件目录

时间:2019-12-27 20:36:14

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

我正在研究一个用例,我想将所有已加载到Azure数据库的文件夹名称加载到另一个“控件”表中,但是在正确使用GetMetadata活动时遇到了问题。

此用例的目的是跳过所有较旧的文件夹(已加载),而仅关注新文件夹并获取“ .gz”文件并将其加载到Azure数据库中。哦,我想我会使用GetMetadata活动将所有文件夹名称发送到存储过程。然后,该存储过程将加载状态为“ 1”(表示成功)的文件夹名称。

然后,该表将在单独的管道中使用,该管道用于将文件加载到数据库中。我将使用“查找”活动与已加载的文件夹进行比较,如果其中一个不匹配,则该文件夹将是从中获取文件的文件夹(源是S3存储桶)。

文件夹结构以YYYY / MM / DD格式嵌套(例如:2019/12/27,每天创建一个新文件夹并在其中放置一个“ gz”文件)。

我使用“ GetMetadata”活动创建了一个ADF管道,该活动指向已将文件夹加载到其中的Blob存储。

enter image description here

但是,当我运行此管道时,我只会得到前三个文件夹名称:2019、2018、2017。

enter image description here

是否不仅可以获取顶级文件夹名称,还可以一直获取到一天的级别?因此,而不是输出为“ 2019”,而是“ 2019/12/26”,然后下一个为“ 2019/12/27”,再加上2017和2018年的所有月份和日期。

如果有人遇到此问题,将不胜感激。

谢谢

2 个答案:

答案 0 :(得分:1)

在这种情况下,您也可以使用通配符占位符,前提是您有一个已定义且不变的文件夹结构。

用作目录:storageroot / * / * / * / 文件名

例如我使用 csvFiles / * / * / * / * / * / * / *.csv 获取所有具有此结构的文件:

csvFiles/主题/副主题/国家/年/月/日

example for wildcards in data source path

然后您将获得此文件夹结构中的所有文件。

答案 1 :(得分:0)

基于Get-Metadata活动文档中的语句,childItems仅返回特定路径中的元素,而不会在子文件夹中包含项目。

enter image description here

我认为您必须使用ForEach Activity来逐层循环childItems数组以展平所有结构。同时,使用Set Variable Activity来连接完整的文件夹路径。然后使用IfCondition Activity,当您检测到元素类型为file而不是folder时,可以调用问题中提到的SP。