PDI /Kettle - 将数据从前一跃点传递到数据库查询

PDI /Kettle - Passing data from previous hop to database query

我是 PDI 和 Kettle 的新手,我认为这是一个自学一些基础知识的简单实验,结果却变成了很多挫折。

我想检查数据库以查看特定记录是否存在(即供应商)。我想通过读取平面文件 (.CSV) 来获取供应商的名称。

我的第一个障碍是仅从 CSV 的 8 个字段中选择供应商名称

第二个障碍是如何将该供应商名称用作数据库查询中的变量。

我的第三个问题是使用何种类型的步骤进行数据库查找。

我尝试了动态 SQL 查询,但无法确定如何使用变量构建查询,以及如何将所需值传递给变量。

数据库table (VendorRatings) 有 30 个字段,其中之一是供应商。 CSV也有8个字段,其中一个也是vendor。

我最大的努力是使用动态查询: SELECT * 来自 VENDORRATINGS WHERE VENDOR = ?

如何以编程方式将所需的值分配给“?”在查询中?具体来说,我如何 link 将特定字段从文本文件输入输出到 "vendor = ?" SQL 查询?

最佳做法是 Stream lookup。对于主要流程 (VendorRating) 中的每条记录,根据其标识符(可能是其编号或名称或名字+姓氏)在参考文件 (CSV) 中查找供应商详细信息(查找字段)。

首先"hurdle":定义csv文件的路径后,按Get field按钮。

它将第一行作为header来了解字段名称并探索前100条(可自定义)记录以确定字段类型。

如果名称不在第一行,取消选中Header row present,按Get field按钮,然后在面板上更改名称。

如果有不止一个 header 行或其他复杂情况,请使用 Text file input

同样适用于lookup step:使用Get lookup field按钮并删除不需要的字段。

由于

  1. 每个供应商最多有一个供应商评级。
  2. 如果没有匹配,你必须做点什么。

我建议以下流程:

读取 CSV 并在 table 中查找每一行(:查找 table 是 SQL table 而不是 CSV 文件)。并在不匹配时设置默认值。我建议一些真正可见的东西,比如“--- NO MATCH ---”。

然后,如果不匹配,过滤器会将流重定向到替代操作(此处:插入 SQL table)。然后这两个流并合并到下游流中。