使用 Pentaho Kettle/PDI 将行列转换为行

问题描述 投票:0回答:3

Pentaho 全新(还有一张新手 SO 海报,所以要小心!)

我想使用 Kettle/PDI 来转换来自 RDBMS 的数据(例如):

问题1 问题2 问题3 问题4
2013 年 1 月 1 日 123.00 测试 1 测试 1.1
2013 年 1 月 2 日 124.00 测试 2 测试 1.2
2013 年 1 月 3 日 125.00 测试 3 测试 1.3
2013 年 1 月 4 日 126.00 测试 4 测试 1.4
2013 年 1 月 5 日 127.00 测试 5 测试 1.5

对此:

问题名称 答案日期 答案编号 答案字符串
问题1 1/1/13     
问题1 1/2/13     
问题1 1/3/13     
问题1 1/4/13     
问题1 1/5/13     
问题2 123.00
问题2 124.00
问题2 125.00
问题2 126.00
问题2 127.00
问题3 测试1
问题3 测试2
问题3 测试3
问题3 测试4
问题3 测试5
问题4 测试1.1
问题4 测试1.2
问题4 测试1.3
问题4 测试1.4
问题4 测试1.5

正如上面所希望反映的那样,原始表中的每个可用数据类型都应该有一个“Answer”列。 PDI 可以做到这一点吗? 如果是这样,有人可以给我一些指示吗? 我尝试使用 Row Normaliser 步骤来旋转表并分配新字段,但我可能做得不太正确(或者存在错误 [PDI 4.4])。

pentaho kettle
3个回答
0
投票

我通过使用脚本步骤编写一个输出行来完成此操作,该输出行包含输入行中每列的列和值。 从那里,我进入了“正则表达式评估”步骤,并使用多个捕获组将值类型映射到流中的其他列。 我用行标准化器搞乱了一段时间,但无法让它完全按照我的要求去做。 使用脚本步骤的性能损失可以忽略不计。


0
投票

trans_Status = SKIP_TRANSFORMATION; var row1 = createRowCopy(4); var row2 = createRowCopy(4); var row3 = createRowCopy(4); var row4 = createRowCopy(4); row1[0] = 'Question1'; row2[1] = 'Question2'; row3[2] = 'Question3'; row4[3] = 'Question4'; row1[1] = Question1; row2[2] = Question2; row3[3] = Question3; row4[3] = Question4; putRow(row1); putRow(row2); putRow(row3); putRow(row4);

不要忘记添加字段;


0
投票

我有一个稀疏矩阵输入并发现了以下规则:

Type 值必须分组在一起,就像 with like
  1. 每个类型分组的新字段列必须具有相同的顺序
  2. 类型组必须排列为人口最多的在前,人口最少的在最后
  3. 因此,如果在给定的示例中您指定了

Fieldname Type new field Question1 date AnswerDate Question2 number AnswerNumber Question3 string AnswerString Question4 string AnswerString

会比
更好用

Fieldname Type new field Question1 date AnswerDate Question3 string AnswerString Question2 number AnswerNumber Question4 string AnswerString

	
© www.soinside.com 2019 - 2024. All rights reserved.