【问题标题】:Data Flow SSIS - Common destination table, different structure flat files数据流 SSIS - 通用目标表,不同结构的平面文件
【发布时间】:2017-04-14 16:03:35
【问题描述】:

我在一个文件夹中有多个平面文件 (.csv) 作为我的源文件。每个文件都有不同数量的列,这些列可能与其他文件相交,也可能不相交。但是,任何源文件中的所有列都始终存在于包含所有这些列的超集的目标表中。

我的要求是遍历每个文件并将该文件中可用的列动态映射到目标表(csv 文件的标题名称与表中的列名称匹配)。

Structure of File 1:
id, name, age, email

Structure of File 2:
id, name, age, address, country

Structure of File 3:
id, name, age, address

Structure of Destination Table:
id, name, age, address, country, email

我想用可用数据填充表的所有列,NULL 填充不是每条记录的数据。如何使用 SSIS 实现这一目标?

【问题讨论】:

  • 最轻松的方法是将三个文件中的所有记录插入到临时/暂存表中,并执行存储过程以在表中填充您的逻辑。您可以在 SSIS 本身中完成所有合并逻辑,但这更麻烦...

标签: sql-server csv ssis


【解决方案1】:

你可以通过添加一个Flat File Connection Manager来做到这一点,只添加一个数据类型为DT_WSTR且长度为4000的列(假设它的名称是Column0

  • dataflow task 中,在Flat File Source 之后添加Script Component
  • Column0标记为输入列并添加6个输出列(id, name, age, address, country, email)
  • Input0_ProcessInputRow 方法中拆分此列并将值分配给输出列。 (你可以写你想要的逻辑)你可以阅读以下问题的答案以获得示例:Reading CSV file some missing columns

【讨论】:

    【解决方案2】:

    Flat File Source 不支持动态文件格式,您必须使用多个源来加载这些文件。

    【讨论】:

    • 这是错误的,您可以忽略Flat File Connection manager 中的列(将行读取为一列)并使用派生列或脚本将它们拆分
    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多