我有一个固定宽度的平面文件,需要加载到多个oracle表中(一行需要拆分成多行)
每列顶部的数字是它们的大小, 我想要的输出应该如下所示。
Flatfile data(fixed width):
3 6 3 11 3 10 3 10 3
ID NAME AGE CTY1 ST1 CTY2 ST2 CTY3 ST3
200JOHN 46 LOSANGELES CA HOUSTON TX CHARLOTTE NC
201TIMBER54 PHOENIX AZ CHICAGO IL
202DAVID 32 ATLANTA GA PORTLAND AZ
事件可能会有所不同......它可能会增长到20-30
DESIRED OUTPUT:
TABLE1
ID NAME AGE
200JOHN 46
201TIMBER54
202DAVID 32
TABLE2
ID SEQ CTY ST
200 1 LOSANGELES CA
200 2 HOUSTON TX
200 3 CHARLOTTE NC
201 1 PHOENIX AZ
201 2 CHICAGO IL
202 1 ATLANTA GA
202 2 PORTLAND AZ
有人可以帮助我吗?
谢谢!
答案 0 :(得分:1)
我会首先听取@bilinkc给出的建议并尝试用一个非透明的方式来解决这个问题。
Click here有关如何使用SSIS Unpivot数据流转换的详细信息。
但是,如果由于某种原因无法解决这个问题并且你真的想用SSIS来解决这个问题,那么我很高兴地说使用SSIS和一个数据流解决问题在技术上是可行的。
以下是步骤的简略列表:
1)将数据流任务添加到包中
2)将平面文件源添加到数据流任务
3)使用连接管理器为平面文件配置平面文件源
4)将多播数据流转换添加到数据流任务
5)使用多播数据流转换连接平面文件源
现在“有趣”的部分(复制和粘贴可以节省你的时间)......
6)向数据流任务添加30条条件拆分数据流转换
7)将多播数据流转换连接到每个条件分割数据流
8)配置每个条件分割N以拉出状态N和城市N具有值
的行子集示例:条件分割1
输出名称:CTY1_ST1
条件:[CTY1]!=“”&& [ST1]!=“”
9)将30个派生列数据流转换添加到数据流
10)将每个连接到30条条件拆分
11)使用派生列名称SEQ和值1到30
配置每个12)添加Union All Data Flow Transformation和Union所有30个数据管道重新组合
现在是“简单”的部分......
13)将您的第一个排序转换添加到您的数据流任务
14)将第31个多播管道连接到第一个分类转换
15)在旁边放一个复选标记并按ID排序(希望ID:NAME和ID:AGE是1:1)
16)选中删除具有重复排序值的行
17)添加第二个多播数据流转换
18)向数据流任务添加第二个排序转换
19)将您的Union All连接到第二个Sort Transformation并按ID排序
20)向数据流任务添加合并连接
21)将第二个多播数据流转换连接为左输入
22)将您的第二个排序转换连接到合并加入作为您的右输入
23)将合并连接配置为连接类型=内连接并选择列ID,SEQ,CTY,ST
24)将您的第一个OLE DB目标添加到您的数据流并将Merge Join连接到它(结果是TABLE2)
25)向数据流添加第二个OLE DB目标,并将第二个多播数据流转换连接到它(结果为TABLE1)