使用 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 中使用 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 将行列转换为行的主要内容,如果未能解决你的问题,请参考以下文章
Kettle(PDI)7.0 无法添加资源库,在工具资源库中是灰色不可选状态,connect界面打开没有任何内容,
打开kettle之后,弹出dos界面,上面写的啥没看清,一闪而过马上就闪退
如何将 TFS 与 Pentaho 一起使用(如何使用 Microsoft TFS 对 Pentaho 文件进行源代码控制)?有没有简单的方法?