从多个文件获取数据并将其加载到ssis中的原始文件目标(原始文件应该是动态的)

从多个文件获取数据并将其加载到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)以及

我有一个源文件夹,其中包含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。类似地,如果我加载第二个文件,它的文件名将作为原始目标输出

谢谢


Satish

您可以在控制流图上使用ForEach循环容器来迭代txt和csv文件

像往常一样,分解你的问题,直到你把它变成一个你可以管理的东西

通过查询处理CSV 以下两个问题和答案将生成一个包,其中OLEDB连接管理器配置为在文件夹
@[User::InputFolder]
中的CSV上操作。3个变量CurrentFileName、InputFolder和Query已通过在Query上设置的表达式定义。 @[User::Query]的表达式类似于“+@[User::CurrentFileName]”

参考答案
在这一点上,你的包裹应该类似于下面的中心部分验证您可以正确枚举文件夹中的所有CSV,并且OLEDB查询工作正常

原始文件 我不是原始文件使用方面的专家,因此可能有更好的方法与它们交互。这将使用第四个变量,
RawFileName
。在其上设置一个表达式,如
@[User::InputFolder]+“RawFile.raw”
,这将导致文件被写入
C:\ssidata\so\satishkumar\RawFile.raw

我的一般方法是使用一个带有脚本任务的数据流,该脚本任务不向原始文件目标发送任何行

将您的目的地配置为

  • 访问模式:来自变量的文件名
  • 变量名:User::RawFileName
  • 写入选项:始终创建
处理CSV 这里的概念是将所有数据附加到初始步骤中创建的原始文件中

您的源应已配置为

  • OLE DB连接管理器:扁平文件
  • 数据访问模式:来自变量的SQL命令
  • 变量名:User::Query
将您的目的地配置为

  • 访问模式:来自变量的文件名
  • 变量名:User::RawFileName
  • 写入选项:追加
生药提取物 此时,foreach枚举器已经完成,所有数据都已加载到临时文件中。现在是时候使用它并将数据发送到目的地了

原始文件源转换
拖到数据流上。毫不奇怪,您将配置为

  • 访问模式:来自变量的文件名
  • 变量名: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。