【问题标题】:Common Table, Different Files and Different File Structures in SSISSSIS中的公用表、不同的文件和不同的文件结构
【发布时间】:2016-04-19 19:19:03
【问题描述】:

我有多个平面文件作为我的来源。每个文件都有一些共同的列。但其中之一也有一些额外的列。我需要将所有数据从平面文件移动到具有仅包含公共列的结构的表中,并跳过其中一个文件中的额外列。结构示例如下:

文件 1 的结构:

id, name, age

文件 2 的结构:

id, name, age, address, country

文件 3 的结构:

id, name, age, address

表结构:

id, name, age

我只想为文件之间的三个公共列填充表格。休息我需要忽略。如何使用 SSIS 实现这一目标?

【问题讨论】:

  • 有多少个平面文件?
  • 可能会有所不同。没有固定数量的文件。有时可能只有一个,有时可能是 6 个或 7 个或 10 个......它可能是“n”个文件
  • 文件中的公共列是已知的还是未知的?
  • 它们是已知的......但拼写可能不同......虽然位置保持不变
  • 我也面临着类似的挑战。唯一的区别是我的目标表包含所有这些列(就像所有列的超集)。我的要求是填充每个文件可用的任何内容,并将其他列 Null 留在目标中。有没有人动态映射到一个共同的目标表?

标签: sql-server ssis


【解决方案1】:

您需要在不同文件夹中分隔不同类型的文件(您可以在 SSIS 中使用文件系统任务通过匹配文件名等或在 powershell 中执行此操作)。每个文件夹中的文件必须具有相同的列数和名称/类型。然后为每个文件夹创建每个循环并遍历以从所需列中获取数据并将它们加载到目标表中。您可能需要最后一步(执行 sql )来删除目标表中的重复项。

【讨论】:

    【解决方案2】:

    简单。设置 3 个 DataFlow 任务,每个任务连接到不同的文件。每个都写入同一个表(例如,通过 OLEDB 目标)。对于除 File1(与表结构匹配)之外的所有内容,只需不要在 OLEDB 目标中映射多余的、不需要的列(即地址、国家/地区)。这些列中的值只会被丢弃,不会进入表中。

    【讨论】:

    • 以上三个文件只是为了说明。文件的数量可能每次都不同
    【解决方案3】:

    您需要一个 for each 循环来遍历平面文件所在的文件夹。

    只要您想要的列在每个文件中的相同位置,那么一切都应该是好的。

    看看here。

    【讨论】:

    • 我试过了......它不起作用......在具有额外字段的文件中,由于行分隔符被定义为 CRLF,因此它将这些字段的数据作为一个。跨度>
    • “那些字段的数据”是什么意思
    • 说它将前 9 个字段考虑到表中相应的 9 个字段中......但是从具有额外列的文件中,它将第 10、11 和 12 个字段中的数据放入表中第 10 列。
    • 几个选项 - 但也许最简单的一个是在您完成导入并修剪最后一列之后拥有一个派生列?是固定长度吗?有没有可以使用的分隔符?
    • 如果它将多列连接到第 10 列,那肯定没关系。您只导入前 9 列,因此之后的任何内容都会被丢弃。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    • 2016-04-01
    • 2011-10-16
    • 2015-01-27
    • 2019-07-05
    相关资源
    最近更新 更多