pentaho - Pentaho 数据集成 Multiway Merge Join
问题描述
我想在 Pentaho 中使用 Multiway Merge Join 步骤?文档严重缺乏,它并没有按照我的直觉认为它会做。
我在 Oracle 中定义了以下表:
JOE1:
A B C
1 NY 3
2 NJ 1
3 NJ 3
4 CT 7
JOE2:
B D
CT Connecticut
NJ New Jersey
NY New York
JOE3:
C E
1 one
3 three
7 seven
这是我的 .ktr 中的 Multiway Merge Join 步骤中的元数据:
Step name: Multiway Merge Join
Input Table1: JOE1 Join Keys: B,C
Input Table2: JOE2 Join Keys: B
Input Table3: JOE3 Join Keys: C
Join Type: INNER
我本来希望我的 .ktr 产生这样的东西:
A B C B_1 D C_1 E
1 NY 3 NY New York 3 three
2 NJ 1 NJ New Jersey 1 one
3 NJ 3 NJ New Jersey 3 three
4 CT 7 CT Connecticut 7 seven
但是,相反,我收到以下错误:
**2018/10/12 14:44:25 - Multiway Merge Join.0 - Unexpected conversion error while converting value [B String(2)] to an Integer
2018/10/12 14:44:25 - Multiway Merge Join.0 -
2018/10/12 14:44:25 - Multiway Merge Join.0 - B String(2) : couldn't convert String to Integer
2018/10/12 14:44:25 - Multiway Merge Join.0 -
2018/10/12 14:44:25 - Multiway Merge Join.0 - B String(2) : couldn't convert String to number : non-numeric character found at position 1 for value [CT]**
这表明它没有加入我在 .ktr 中定义的加入字段。
不幸的是,我公司的防火墙阻止我发送指向任何文件或图像的链接。如果我做错了什么,或者即使我的行为预期是准确的,我希望我已经提供了足够的信息,以便有人告诉我。
解决方案
多重合并连接不像 SQL 连接。这是一个合并,看起来像一个 SQL 排序的联合。它采用两个流程(Joe1 和 Joe2),并将记录一个接一个地记录最低记录。特别是流元数据(列名、类型和顺序)必须相同,这是 PDI 应该警告您的(除非您之前按下了不再告诉我按钮)。
您可以使用Join row (cartesian product)
. 不用担心它不是笛卡尔积,因为您可以指定它JOE1.B = JOE2.B
(以及更多)。PDI 会记住您之前对传入流进行排序(除非您之前按下了不再告诉我按钮)。当然,您必须这样做两次:一次将 Joe1 与 Joe2 连接,一次将生成的流连接到 Joe3。
但是,在您的情况下,您不是在joins之后,而是在look up 之后。对于每个Joe1.B,您正在搜索一个Joe2.B,对于每个Joe1.C,您正在寻找一个Joe3.C。就像在附图中一样,第一个查找已打开,因此您可以查看参数。[不要忘记指定返回列的类型!]
请注意,您始终可以将所有这些都放在 SQL:SELECT * FROM joe1 JOIN joe2 ON joe2.B=joe1.B JOIN joe3 ON joe3.C=joe1.C
中。但这将更难维护,并且如果查询很复杂(大量的连接和许多跨表关系),它可能会比 PDI 慢。
推荐阅读
- javascript - 是否可以添加一个“。” 在 Math.random 内
- javascript - 在javascript中排序后,使用来自值的新键格式化JSON
- python - 无法安装使用 entry_points、ModuleNotFoundErrors 的本地开发的 python 包
- javascript - javascript将/转换为带分数的除号
- memory - 如何在 Python-Plotly-Dash 布局中使用回调中的变量?
- c# - T4 转换文件找不到自定义程序集
- sql - SQL 函数将数字更改为 varchar2 中的等效字符串,例如 1 '1 ottershaw road' 到 'one otthershaw road'
- autodesk-forge - Autodesk Revit 装配体
- websocket - 由于TIME_WAIT,当服务器要关闭连接时,告诉客户端关闭它不是更好吗?
- text-to-speech - 在音乐节软件的语音列表中添加语音