我正在研究一个用例,我想将所有已加载到Azure数据库的文件夹名称加载到另一个“控件”表中,但是在正确使用GetMetadata活动时遇到了问题。
此用例的目的是跳过所有较旧的文件夹(已加载),而仅关注新文件夹并获取“ .gz”文件并将其加载到Azure数据库中。哦,我想我会使用GetMetadata活动将所有文件夹名称发送到存储过程。然后,该存储过程将加载状态为“ 1”(表示成功)的文件夹名称。
然后,该表将在单独的管道中使用,该管道用于将文件加载到数据库中。我将使用“查找”活动与已加载的文件夹进行比较,如果其中一个不匹配,则该文件夹将是从中获取文件的文件夹(源是S3存储桶)。
文件夹结构以YYYY / MM / DD格式嵌套(例如:2019/12/27,每天创建一个新文件夹并在其中放置一个“ gz”文件)。
我使用“ GetMetadata”活动创建了一个ADF管道,该活动指向已将文件夹加载到其中的Blob存储。
但是,当我运行此管道时,我只会得到前三个文件夹名称:2019、2018、2017。
是否不仅可以获取顶级文件夹名称,还可以一直获取到一天的级别?因此,而不是输出为“ 2019”,而是“ 2019/12/26”,然后下一个为“ 2019/12/27”,再加上2017和2018年的所有月份和日期。
如果有人遇到此问题,将不胜感激。
谢谢
答案 0 :(得分:1)
在这种情况下,您也可以使用通配符占位符,前提是您有一个已定义且不变的文件夹结构。
用作目录:storageroot / * / * / * / 文件名
例如我使用 csvFiles / * / * / * / * / * / * / *.csv 获取所有具有此结构的文件:
csvFiles/主题/副主题/国家/年/月/日
然后您将获得此文件夹结构中的所有文件。
答案 1 :(得分:0)
基于Get-Metadata活动文档中的语句,childItems
仅返回特定路径中的元素,而不会在子文件夹中包含项目。
我认为您必须使用ForEach Activity来逐层循环childItems
数组以展平所有结构。同时,使用Set Variable Activity来连接完整的文件夹路径。然后使用IfCondition Activity,当您检测到元素类型为file
而不是folder
时,可以调用问题中提到的SP。