从多个文件获取数据并将其加载到ssis中的原始文件目标(原始文件应该是动态的)
我有一个源文件夹,其中包含4个csv文件,每个文件中的列数不同。我只需要从每个csv获取3列(元数据与所有4个文件中的这3列相同),然后从源文件夹中的所有可用文件加载原始目标中的列。原始目标输出文件名必须与我们获取的inputfilename+时间戳类似 在下一个级别,我需要将这个输出作为原始源获取,并将这些记录插入oledb目的地。目标表也必须是动态的 例如,我有4个名为test1.csv的csv文件(10列)。test2.csv(8)、test3.csv(6)、test4.csv(10)以及时间戳 所有这4个文件都有相同的列position_id、asofdate和sumsured,现在我只想将这3列加载到原始目标。如果加载test1.csv,则原始目标输出文件名必须为RW_test1_20120119_22222.RW。类似地,如果我加载第二个文件,它的文件名将作为原始目标输出 谢谢从多个文件获取数据并将其加载到ssis中的原始文件目标(原始文件应该是动态的),ssis,Ssis,我有一个源文件夹,其中包含4个csv文件,每个文件中的列数不同。我只需要从每个csv获取3列(元数据与所有4个文件中的这3列相同),然后从源文件夹中的所有可用文件加载原始目标中的列。原始目标输出文件名必须与我们获取的inputfilename+时间戳类似 在下一个级别,我需要将这个输出作为原始源获取,并将这些记录插入oledb目的地。目标表也必须是动态的 例如,我有4个名为test1.csv的csv文件(10列)。test2.csv(8)、test3.csv(6)、test4.csv(10)以及
Satish您可以在控制流图上使用ForEach循环容器来迭代txt和csv文件 像往常一样,分解你的问题,直到你把它变成一个你可以管理的东西 通过查询处理CSV 以下两个问题和答案将生成一个包,其中OLEDB连接管理器配置为在文件夹
@[User::InputFolder]
中的CSV上操作。3个变量CurrentFileName、InputFolder和Query已通过在Query上设置的表达式定义。
@[User::Query]的表达式类似于“+@[User::CurrentFileName]”
参考答案
RawFileName
。在其上设置一个表达式,如@[User::InputFolder]+“RawFile.raw”
,这将导致文件被写入C:\ssidata\so\satishkumar\RawFile.raw
我的一般方法是使用一个带有脚本任务的数据流,该脚本任务不向原始文件目标发送任何行
将您的目的地配置为
- 访问模式:来自变量的文件名
- 变量名:User::RawFileName
- 写入选项:始终创建
- OLE DB连接管理器:扁平文件
- 数据访问模式:来自变量的SQL命令
- 变量名:User::Query
- 访问模式:来自变量的文件名
- 变量名:User::RawFileName
- 写入选项:追加
原始文件源转换
拖到数据流上。毫不奇怪,您将配置为
- 访问模式:来自变量的文件名
- 变量名:User::RawFileName
使用带有
GETDATE/GETUTCDATE
的表达式来定义文件名时要小心,因为文件名是不断求值的。2005年,我们使用了FileName_HHMMSS,但出现了问题,因为在创建文件和下一个使用该文件的任务之间的同一秒内,处理没有完成。相反,我更成功地使用了一个动态但固定的起点,即系统变量StartTime@[system::StartTime]
你不确定如何做整个事情,还是有一个你不确定的特定点?嗨,billinkc,感谢你宝贵的回复,但我无法按照你给出的步骤进行操作,比如如何连接到microsoft jet loedb 4.0提供商。我尝试了u创建变量的方法,我已经将Rawfile varibale分配给原始目标,它的抛出错误(如文件名)没有正确指定。你能不能更详细地解释一下这个问题。对于rawfile问题,你的变量是什么样的?你可以从上面的屏幕截图中看到我的照片。要连接到JET OLE DB提供程序,需要创建新的OLE DB连接管理器,并将提供程序类型更改为JET OLE DB。