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

Posted

技术标签:

【中文标题】使用 Pentaho Kettle/PDI 将行列转换为行【英文标题】:Converting Row Columns to Rows with Pentaho Kettle/PDI 【发布时间】:2013-03-05 19:19:31 【问题描述】:

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”列。 PDI可以做到这一点吗?如果是这样,有人可以为我提供一些指示吗?我尝试使用Row Normaliser 步骤来透视表并分配新字段,但我可能做得不太正确(或者存在错误 [PDI 4.4])。

【问题讨论】:

检查该步骤的示例。它确实有效,但每次我必须使用它时,我都必须检查示例,因为由于某种原因配置它并不直观! 您是否愿意/允许在 PDI 中使用 javascript 节点? Kevin D,两者都是。我想通过 JS 步骤我可以按类型过滤并根据类型添加字段?如果你有一个例子,我将不胜感激。我不反对使用 JS,但我不确定是否有更“原生”的方式来做到这一点。 我不久前遇到了这个问题,想知道你是否遇到了同样的事情,如果是的话,投票给 jira! jira.pentaho.com/browse/PDI-9467 我认为我是。无论如何,我投票了!感谢您的提醒。 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

别忘了添加字段;

【讨论】:

但我认为你做错了什么,如果你想要这么奇怪的事情【参考方案3】:

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

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

    Type 值必须组合在一起,就像与like 一样 每个类型分组的新字段列的顺序必须相同 必须将类型组排列为人口最多的最前面,人口最少的最后一个

因此,如果在给定的示例中指定了

 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

【讨论】:

以上是关于使用 Pentaho Kettle/PDI 将行列转换为行的主要内容,如果未能解决你的问题,请参考以下文章

Pentaho Kettle 中的 while 循环实现

Kettle(PDI)7.0 无法添加资源库,在工具资源库中是灰色不可选状态,connect界面打开没有任何内容,

打开kettle之后,弹出dos界面,上面写的啥没看清,一闪而过马上就闪退

如何将 TFS 与 Pentaho 一起使用(如何使用 Microsoft TFS 对 Pentaho 文件进行源代码控制)?有没有简单的方法?

使用pentaho工具将数据库数据导入导出为Excel

Pentaho,R Executor 插入数据库