首页 文章

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

提问于
浏览
0

我有一个源文件夹,其中包含4个csv文件,每个文件中的列数不同 . 我需要从每个csv中仅获取3列(所有4个文件中的3个元素相同的元数据),并从源文件夹中可用的所有文件中加载Raw Destination中的列 . 和原始目标输出文件名必须类似于我们获取时间戳的inputfilename .

在下一级,我需要将此输出原始作为原始源获取并将此记录插入oledb目标 . 并且目标表也必须是动态的 .

例如我有 4 csv files called, test1.csv(10 columns). test2.csv(8), test3.csv(6), test4.csv(10) along with time stamps.

所有这4个文件都有 position_id, asofdate, sumassured 列的共同点,现在我只想将这3列加载到原始目标 . If i load test1.csv then my raw destination outputfile name has to be RW_test1_20120119_222222.RW. similalrly if i load second file its filename as raw destination output. .

谢谢

萨蒂什

2 回答

  • 1

    与往常一样,分解您的问题,直到您将其纳入您可以管理的事物中 .

    通过查询处理CSV

    下面的两个问题和答案将导致包含OLEDB连接管理器的程序包配置为在 @[User::InputFolder] 文件夹中的CSV上运行 . 已经使用Query上的表达式设置了3个变量CurrentFileName,InputFolder和Query . @ [User :: Query]的表达式看起来像 "SELECT position_id, asofdate, sumassured FROM " + @[User::CurrentFileName]

    参考答案

    此时,您的包装应该类似于下面的中心部分 . Verify 您可以正确枚举文件夹中的所有CSV并且OLEDB查询部分可以正常工作 .

    Conceptual data flow

    RAW文件

    我不是RAW文件使用方面的专家,所以可能有更好的方式与它们进行交互 . 这将使用第四个变量 RawFileName . 在 @[User::InputFolder] + "RawFile.raw" 上设置一个表达式,这将导致文件被写入 C:\ssisdata\so\satishkumar\RawFile.raw

    我的一般方法是使用一个脚本任务的数据流,该任务不会向RAW文件目的地发送任何行 .

    Initialize raw file

    将目的地配置为

    • 访问模式:变量的文件名

    • 变量名称:User :: RawFileName

    • 写入选项:始终创建

    处理CSV

    这里的概念是将所有数据附加到在初始步骤中创建的RAW文件中 .

    Process CSVs

    您的来源应该已经配置为

    • OLE DB连接管理器:FlatFile

    • 数据访问模式:来自变量的SQL命令

    • 变量名称:User :: Query

    将目的地配置为

    • 访问模式:变量的文件名

    • 变量名称:User :: RawFileName

    • 写选项:追加

    从RAW中提取

    此时,foreach枚举器已完成,所有数据已加载到暂存文件中 . 现在是时候消耗它并将数据发送到目的地了 .

    Raw file source

    Raw File Source Transformation 拖到数据流上 . 不出所料,您将配置为

    • 访问模式:变量的文件名

    • 变量名称:User :: RawFileName

    而不是模拟目标,将其连接到正确的数据目标 .

    警告

    使用带有 GETDATE/GETUTCDATE 的表达式来定义文件名时要小心,因为它们经常被评估 . 在2005年,我们使用了FileName_HHMMSS并且遇到了问题,因为在创建文件和下一个使用该文件的任务之间,处理没有在同一秒内完成 . 相反,我使用动态但固定的起点获得了更好的成功,通常,这是系统变量,StartTime @[System::StartTime]

  • 0

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

相关问题