只有当完整文件存在于文件夹中时才运行SSIS
我开发了一个消耗平面文件的ETL。平面文件的大小从250 MB到300 MB不等。 当文件存在于文件夹中时,它工作得很好。但是当文件处于生成模式时它会失败。例如:只有当完整文件存在于文件夹中时才运行SSIS
例如:此ETL包从早上8点运行到上午10点,以检查文件是否存在于文件夹中。现在,在任何情况下(比如说上午9点),如果文件正在开始生成,直到现在它是10 MB。 ETL开始处理文件,并在4-5分钟后挂起并失败(挂在正在读取该文件存在于文件夹中的脚本任务中)。
仅当文件生成完成后才触发SSIS包的最佳方法是什么?
注意:我无法控制文件生成。
添加For Loop Container
用布尔变量bFileAccessible
:
- 的Init表达是
@bFileAccessible=False
- 中的eval表达是
@bFileAccessible==False
的For Loop Container
内添加Script Task
与ReadWriteVariable User::bFileAccessible
和以下C#脚本(仅显示Main()
方法):
public void Main()
{
try
{
using (Stream stream = new FileStream("Path\to\your\file", FileMode.Open))
{
Dts.Variables["bFileAccessible"].Value = true;
}
}
catch
{
Dts.Variables["bFileAccessible"].Value = false;
}
Dts.TaskResult = (int)ScriptResults.Success;
}
你还应该使用一个变量作为文件名,也许有一点等待的时间间隔。有关脚本的更多信息,请参阅here。
检查文件的修改时间每次和comapre同样与前一个.... 这不是很好的逻辑,但一个好主意,如果没有完美的替代
当生成过程停顿一段时间时,这不起作用。 – 2013-03-20 12:00:59
您可以使用第三方[文件属性任务(HTTP ://filepropertiestask.codeplex.com/)并测试FileIsReadable – 2013-03-20 07:44:00
@OcasoProtal感谢您的链接,但我的客户不会允许我们使用任何第三方工具。因为他们还有其他项目/工作也在运行,这对他们来说将是一个巨大的恐怖。我们已经试图向他推荐其他第三方工具,但他只是希望我们开发相同的功能。 :) – Zerotoinfinity 2013-03-20 07:49:42