在Azure Data Factory中,我使用Lookup活动来获取要下载的文件列表,然后将其传递给ForEach,其中数据流正在处理每个文件
我没有打开"顺序"模式,我会假设数据流应该并行运行。然而,它们的运行时间并不相同,但实际上它们之间的时间几乎是恒定的(例如,第一个数据流运行了4分钟,第二个6分钟,第三个8分钟,等等)。看起来好像第二个数据流正在等待第一个数据流完成,然后使用它的集群来处理文件。
这是预期的行为吗?我在集群集上设置了TTL,但这并没有太大帮助。如果是,那么变通的办法是什么?我目前正在首先创建一个文件列表,并使用它而不是ForEach,但我不确定我是否会看到效率的提高
我无法解决并行数据流不并行执行的问题,但是,我已经设法改变了可以提高性能的解决方案。
以前是什么:一个查找活动,它将获取要处理的文件列表,并将其传递给带有数据流活动的ForEach循环。
我现在正在测试的是:一个数据流活动,它会得到一个文件列表,并将它们保存在ADLS的文本文件中,然后另一个数据流活动,以前在ForEach循环中,但将其源更改为使用"文件列表";并指向列表
结果是效率的提高(使用相同的集群,40个文件使用ForEach大约需要80分钟,使用List of files只需要2-3分钟),但是,现在调试并不容易,因为所有的东西都在一个数据流
你可以覆盖文件列表文件,或者使用动态表达式并将文件命名为pipelineId或其他东西