File 仅当文件夹中存在完整文件时才运行SSIS
我开发了一个使用平面文件的ETL。平面文件的大小从250 MB到300 MB不等。 当文件存在于文件夹中时,它的工作绝对正常。但当文件处于生成模式时,它会失败 例如:此ETL包从上午8点运行到上午10点,以检查文件夹中是否存在该文件。现在,在任何情况下(比如上午9点),如果文件开始生成,到现在为止,它是10MB。ETL开始处理文件,4-5分钟后挂起并失败(挂起脚本任务,读取文件是否存在于文件夹中) 只有在文件生成完成后,才触发SSIS包的最佳方法是什么File 仅当文件夹中存在完整文件时才运行SSIS,file,ssis,etl,File,Ssis,Etl,我开发了一个使用平面文件的ETL。平面文件的大小从250 MB到300 MB不等。 当文件存在于文件夹中时,它的工作绝对正常。但当文件处于生成模式时,它会失败 例如:此ETL包从上午8点运行到上午10点,以检查文件夹中是否存在该文件。现在,在任何情况下(比如上午9点),如果文件开始生成,到现在为止,它是10MB。ETL开始处理文件,4-5分钟后挂起并失败(挂起脚本任务,读取文件是否存在于文件夹中) 只有在文件生成完成后,才触发SSIS包的最佳方法是什么 注意:我无法控制文件生成 为循环容器添加一
注意:我无法控制文件生成 为循环容器添加一个带有布尔变量的
bFileAccessible
:
- Init表达式是
@bFileAccessible=False
- Eval表达式是
@bFileAccessible==False
For循环容器中
添加一个Script任务
,其中包含一个ReadWriteVariableUser::bFileAccessible
和以下C#脚本(仅显示Main()
方法):
您还应该为文件名使用一个变量,可能还有一点等待间隔。有关脚本的更多信息,请参阅。每次检查文件修改时间,并与上一次相同。。。。
这不是一个好的逻辑,但如果没有完美的替代方案,这是一个好主意您可以使用第三方并测试
文件是否可读
@OcasoProtal谢谢链接,但我的客户不允许我们使用任何第三方工具。因为他们还有其他项目/工作也在prod上运行,这对他们来说将是一个巨大的恐怖。我们已经尝试向他推荐其他第三方工具,但他只是希望我们开发相同的功能。:)当生成过程暂停一段时间时,这将不起作用。
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;
}