在导入客户数据时,遇上了一个问题
原始数据如下:
机组编码 | 用户 | 岗位 |
JY01 | 罗启先、杭朝文 | 机长、车间副主任 |
JY02 | 张后伟 | 机长 |
JY03 | 张开林、王松 | 机长、副手 |
其中用户和岗位是一一对应的,希望转换后得到以下内容
机组编码 | 用户 | 岗位 |
JY01 | 罗启先 | 机长 |
JY01 | 杭朝文 | 车间副主任 |
JY02 | 张后伟 | 机长 |
JY03 | 张开林 | 机长 |
JY03 | 王松 | 副手 |
用kettle里的列拆分为多行组件是可以把数据拆成多行的,但现在是有两列需要拆成多行,再重新拼接,所以考虑先单独做拆分,再用记录集连接控件进行连接,但发现这么直接拆分后再连接的后果,就是会多出许多数据,比如变成
机组编码 | 用户 | 岗位 |
JY01 | 罗启先 | 机长 |
JY01 | 罗启先 | 车间副主任 |
JY01 | 杭朝文 | 机长 |
JY01 | 杭朝文 | 车间副主任 |
... |
因此,考虑引入序列组件,就是先分拆成以下两个表格
机组编码 | 用户 | 序号 |
JY01 | 罗启先 | 1 |
JY01 | 杭朝文 | 2 |
JY02 | 张后伟 | 3 |
机组编码 | 岗位 | 序号 |
JY01 | 机长 | 1 |
JY01 | 车间副主任 | 2 |
JY02 | 机长 | 3 |
这样在连接时候,用机组编码+序号的方式就可以正常拼接出数据了
最终的kettle流程图如下:
其中自定义常量数据如下:
列拆分的属性
增加序列属性
注意,由于kettle里的序列是全局的,在这里计数器名称必须起一个值,而另一个序列的计数器名称起另一个值,否则***在第一个处理完后,第二个***的起始***就不是从1开始了
记录值合并属性如下:
最终的输出结果,如果用输出文本,则是这种格式
至此搞定
不知道还有没有其它的好方法,希望有更好的意见