SSIS从一个csv文件中提取不同的数据表

时间:2013-09-14 05:02:40

标签: csv ssis extract

我无法理解如何从此文件中提取数据:

0|V1102299|USA05639|A&P POLYCHEM|20110214|49896.0000 |0.0000 
1|V1102299|00001|USA05639|A&P POLYCHEM|20110222|DOA100||Di Octyl Adipate      210KG/DR|16800.000 |KG|2970.0000 
2|V1102299|00001|00|20130617|5000010209||16800.000 ||49896.0000 
4|USA05639|A&P POLYCHEM|FRB1|Freight (Value)|4100.000000000 |USD
4|USA05639|A&P POLYCHEM|ZL02|Fuel (value)|0.000000000 |USD
4|USA05639|A&P POLYCHEM|ZL01|Temp Control (value)|0.000000000 |USD
4|USA05639|A&P POLYCHEM|ZOB1|Customs (Value)|0.000000000 |USD
4|USA05639|A&P POLYCHEM|ZL03|Haz. Mat. (value)|0.000000000 |USD

其中第一列表示行类型:

  • 0是根元素(必填)
  • 1是儿童(可选,多个)
  • 2是儿童(可选,多个)
  • 3是儿童(可选,多个)
  • 4是儿童(可选,多个)

并提取到具有相应行列的多个表,并保持行之间的关系 每行都有自己的列数和列名,类型。

注意:我对如何收到此csv文件无法控制。我个人知道这是一种可怕的做法。

1 个答案:

答案 0 :(得分:1)

这就是我们应对这些问题的方法:一般来说,你必须将这个过程分成几个部分:

  1. 拆分csv文件。
  2. 阅读不同的文件类型。
  3. 广告1.添加Data Flow以阅读输入csv文件。

    • Flat File Source开始,只作为字符串类型的一列(Column1)。我们这样做只是为了得到你提到的行类型。

    • 使用Transformation Component将此行拆分为多个部分。获取第一个值(您的类型标识符)并将其设置为名为ResultBuffer的OutputBuffer(TypeID)列:

    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
       var arr = Row.Column1.Split('|'); // Splitting the rows of Names column
       ResultBuffer.AddRow();
       ResultBuffer.TypeID = arr[0];
    }
    
    • 使用Conditional Split检查类型: TypeID == 0(与其他人相似)。在此之后,只需要正常的Flat File Destination,即可将您已阅读的一列保存到文件名TypeID_file.txt

    广告2。 使用5个单独的容器创建一个Data Flow,分别从每个创建的文件中读取,并正确设置列名和类型。