【问题标题】:SSIS and Normalizing Data in TXT fileSSIS 和规范化 TXT 文件中的数据
【发布时间】:2013-09-07 22:11:00
【问题描述】:

我正在学习 SSIS,我有一个关于如何规范化文本文件中现有数据的问题。

在我的目录中,我有一个针对美国每个州的文本文件,因此 AK.txt 和 AL.txt 具有以下结构:

AK,F,1910,Mary,14 AL,F,1910,Mary,875

这代表state,sex,year,name,frequency

如果我有以下表格:

  • 状态(id,state)
  • 性别(id,sex)
  • 年份(id,year)
  • 姓名(ID、姓名、频​​率)

我将使用 SSIS 中的什么转换将每个数据元素放入其各自的表中?

【问题讨论】:

    标签: .net sql-server ssis


    【解决方案1】:

    A.要首先捕获多个文件,这里有两个选项:

    1. 使用 For Each File 迭代器循环遍历每个文件并加载到某些内容(行集对象、原始文件或临时表),然后将其用作 B 部分的源

      李>
    2. 或者为每个文件创建一个平面文件源,并使用联合运算符将它们连接起来(不推荐)

    B.将单个数据流到多个表中

    使用多播将数据投射到 5 个流中。然后对它们进行排序和区分以获得不同的记录,然后将它们加载到表中。

    我个人的偏好是加载到临时表中,然后通过 SQL 执行所有操作。

    【讨论】:

    • 多播转换是否在列级别上工作?例如,如果我想将状态移动到一个表中,而将其他字段移动到它们各自的表中。能做到吗?
    • 你为什么不试试看。多播制作数据的副本。您将需要 5 个副本,然后您需要在每列上“区分”这些副本。然后你最终得到一个数据流来放入一个表中。我很好奇您为什么要根据频率数字丢弃状态,性别,年份信息。即,加载此数据后,您无法根据 Name 表中的年份分析频率。
    • 换句话说,Multicast 会复制数据。在多播之后,您需要使用Sort 将第一个多播转换为不同的状态记录,然后将其加载到您的状态表中。其他人也是如此。但如果你问我,在 SQL 中要容易得多
    • 有趣。在你的帮助下,我认为这在 SQL 中可能更容易做到。
    • 我的意见:在 SQL 中肯定更容易。使用 SSIS 遍历文件并将它们全部加载到单个临时表中。然后只需运行一些 INSERT/SELECT DISTINCT 从临时表加载您的表。我发现 SSIS 擅长编排工作,但不擅长处理复杂的数据。
    【解决方案2】:

    如果您的文件是comma 分隔的“state,sex,year..”,最简单的方法是使用 平面文件 源。您可以将其设置为使用逗号作为列分隔符和换行符作为行分隔符。确保在 advanced 下设置正确的数据类型。然后,输出是每个分隔字段的列。然后使用其中一个目的地(OLE DB..)并将这些东西放在你的表中。

    如果您有任何问题,请告诉我

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-27
      • 1970-01-01
      • 2014-12-23
      • 2013-12-11
      • 1970-01-01
      • 2022-11-24
      • 1970-01-01
      • 2015-03-04
      相关资源
      最近更新 更多