【问题标题】:Combine 2 rows of CSV file in SSIS在 SSIS 中合并 2 行 CSV 文件
【发布时间】:2019-06-05 08:00:22
【问题描述】:

我有一个 CSV 文件,其中的信息分布在两行中
第 1 行包含姓名和年龄
第 2 行包含地址、城市、薪水、职业等详细信息

我想合并 2 行以将其插入数据库。
CSV 文件:

Raju, 42
12345 west andheri,Mumbai, 100000, service

在 SQL Server 中,我可以使用游标来完成。但我必须在 SSIS 做。

【问题讨论】:

  • 一些选项: 1. 写一个脚本,预先去掉回车; 2. 使用脚本变换在输入的途中对其进行变换(比如这个stackoverflow.com/questions/31442325/…); 3. 使用查找和 SQL 命令目标插入第一行并更新第二行。如果您对这些感兴趣,我可以进一步解释

标签: sql-server csv ssis etl


【解决方案1】:

对于类似的情况,我会将每一行视为一列,并使用脚本组件来修复结构。您可以按照我对以下问题的回答。它包含一个分步指南:

【讨论】:

    【解决方案2】:

    我喜欢使用脚本组件,以便在这种情况下能够存储来自不同行的数据。

    1. 将文件作为单列 CSV 读入 Column1。

    2. 添加脚本组件并添加一个名为 CorrectedOutput 的新输出,并定义两行中的所有列。另外,将 Column1 标记为已读。

    3. 在行处理之外创建 2 个变量来“保持”第一行

      string name = string.Empty;
      string Age = string.Empty;
      
    4. 使用拆分来确定第 1 行或第 2 行

      string[] str = Row.Column1.Split(',');
      
    5. 使用 if 来确定第 1 行或第 2 行

      if(str.Length == 2)
      {
        name = str[0]; 
        age=str[1];}
      else
      {
           CorrectedOutputBuffer.AddRow();
           CorrectedOutputBuffer.Name = name; //This uses the stored value from prior row
           CorrectedOutputBuffer.Age = age; //This uses the stored value from prior row
           CorrectedOutputBuffer.Address = str[0];
           CorrectedOutputBuffer.City = str[1];
           CorrectedOutputBuffer.Salary = str[2];
           CorrectedOutputBuffer.Occupation = str[3];
      }
      

    整体效果是这样的…… 在第 1 行,您只需将数据保存在变量中 在第 2 行,您将数据写入 1 个新行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-19
      • 2017-12-19
      • 1970-01-01
      • 2016-05-01
      • 2018-04-07
      相关资源
      最近更新 更多