6

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
1/4/13 126.00 测试 4 测试 1.4
2013 年 1 月 5 日 127.00 测试 5 测试 1.5

对此:

QuestionName AnswerDate AnswerNumber AnswerString
问题 1 2013 年 1 月 1 日     
问题 1 2013 年 1 月 2 日     
问题 1 2013 年 1 月 3 日     
问题 1 2013 年 1 月 4 日     
问题 1 2013 年 1 月 5 日     
问题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
Question4 测试1.1
Question4 测试 1.2
Question4 测试1.3
Question4 测试 1.4
Question4 测试 1.5

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

4

3 回答 3

0

使用 javascript 步骤:

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);

不要忘记添加字段;

于 2013-10-11T11:55:42.427 回答
0

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

于 2013-08-27T19:54:59.287 回答
0

Row Normalizer 对您指定反规范化的顺序非常敏感。

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

  1. 类型值必须组合在一起,如与 like
  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
于 2014-02-13T02:31:13.977 回答