SSIS动态平面文件连接以使用日期时间,分钟,第二个时间戳加载每日文件

时间:2018-12-11 16:16:51

标签: visual-studio ssis etl flat-file dts

我必须从网络位置加载每日csv文件,该文件从api导出并保存到网络位置后,日期时间戳带有分钟和秒。 我试图使我的包动态,以便每隔一天更改文件名时它就不会更改。我尝试在平面文件管理器的连接属性中使用表达式,但该表达式也不起作用。

我的文件名如下所示: DS_All_users_with_additional_fields_2018_12_11_10_00.csv

我尝试使用以下表达式来解决我的问题,但是如果csv导出存在延迟并且文件名的分钟和秒更改,事情会变得复杂:

@ [User :: DataLoadDir] +“ DS_All_users_with_additional_fields _” +(DT_STR,4,1252)YEAR(DATEADD(“ dd”,-1,getdate()))+“ _” +(DT_STR,4,1252) MONTH(DATEADD(“ dd”,-1,getdate()))+“ _” +(DT_STR,4,1252)DAY(DATEADD(“ dd”,0,getdate()))+“ _ 10_00.csv” < / p>

任何建议如何解决此问题?

2 个答案:

答案 0 :(得分:0)

您是否仅需要导入该目录中名称以DS_All_users_with_additional_fields_开头的文件?如果是这样,请使用“脚本任务”查找最新的脚本任务,并将连接字符串中使用的变量设置为此名称。以下示例使用LINQ查找以您列出的名称开头的文件,然后按创建日期对文件进行排序,然后返回第一个文件的名称。下面的Name属性将包含扩展名。您还可以通过将其更改为FullName属性来获取完整的文件路径,在这种情况下,您可以将此值用于平面文件连接字符串使用的变量,而不是将其与{{1 }}变量。此示例确实引用了以下指定的@[User::DataLoadDir]System.IO

System.Linq

答案 1 :(得分:0)

您可以使用foreach循环文件枚举器并应用以下文件规范表达式:

*

*服务器作为通配符,将拾取所有与该字符串匹配的文件。您可以使用此工具,以便根据您的需要使其变得灵活。在这种情况下,作业将扫描特定文件夹中与上述字符串匹配的所有文件。然后可以将其分配给变量,您可以使用该变量动态设置连接字符串。

我认为您不能将.before()添加到连接字符串本身中。

更新

要设置连接管理器的连接字符串属性,请参见下图。请注意,此解决方案将改变工作流程。您最初的工作流程是告诉连接管理器专门查找什么文件。但是,通过实现foreach循环,作业现在正在搜索特定文件夹路径中可用的所有文件。注意:您需要确保在连接字符串变量(即\\ networkpath \ filename.csv)中包含标准域名(FQDN)

enter image description here