SSIS平面文件源行重构

3
我有一个扁平文件源,包含成千上万条记录(在某些情况下超过100K)。这个源是外部采购的,我无法请求布局修订。
在这个扁平文件中,每行包含四列:
| User ID     | Status_1  | Status_2 | Status_3
|    1337     | Green     | Yellow   | Red
|    1234     | Red       | Red      | Green

目标表旨在接受两列:
| User ID     | Status Codes
|    1337     |    Green
|    1337     |    Yellow
|    1337     |    Red
|    1234     |    Red
|    1234     |    Red
|    1234     |    Green

到目前为止,我已经运行了3个不同的SSIS包到我的目标表格,每个Flat File中有一个状态列对应一个包。
我想要的是使用单个SSIS包,并创建另一个Flat File Destination或Temp Table来镜像目标表格,并从那里导入数据。
这可行吗?如果可以,最好使用哪些任务实践,而不仅仅是UPDATE和SET到Temp Table。

1
这里只是随意猜测,但使用一个多播组件连接到3个不同的OLE DB目标组件,同时写入同一张表,能解决这个问题吗? - billinkc
@billinkc 你说得对。我还在学习如何利用这些组件,所以我会试一试。 - Phoenix
1个回答

1

看起来这是一个好用SQL的情况,我会在这个情况下使用UNPIVOT。

http://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx

那个链接有一个很好的示例,看起来与您的数据非常相似:
--Create the table and insert values as portrayed in the previous example.
CREATE TABLE pvt (VendorID int, Emp1 int, Emp2 int,
    Emp3 int, Emp4 int, Emp5 int);
GO
INSERT INTO pvt VALUES (1,4,3,5,4,4);
INSERT INTO pvt VALUES (2,4,1,5,5,5);
INSERT INTO pvt VALUES (3,4,3,5,4,4);
INSERT INTO pvt VALUES (4,4,2,5,5,4);
INSERT INTO pvt VALUES (5,5,1,5,5,5);
GO
--Unpivot the table.
SELECT VendorID, Employee, Orders
FROM 
   (SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5
   FROM pvt) p
UNPIVOT
   (Orders FOR Employee IN 
      (Emp1, Emp2, Emp3, Emp4, Emp5)
)AS unpvt;
GO

当我从事数据仓库工作时,我的一半工作似乎都是在使用UNPIVOT处理通过电子表格获得的垃圾数据。

是的,这正是我所需要的。非常感谢! :) - Phoenix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接