PDI /水壶-将数据从上一跳传递到数据库查询

时间:2018-11-20 02:17:10

标签: pentaho kettle

我是PDI和Kettle的新手,我认为这是一个简单的自学基本知识的实验,结果使很多人感到沮丧。

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

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

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

我的第三个问题是用于数据库查找的步骤类型。

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

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

我最大的努力是使用以下动态查询: 从供应商= =的供应商处选择*

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

2 个答案:

答案 0 :(得分:1)

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

enter image description here

第一个“障碍” :定义了csv文件的路径后,按Get field按钮。

它将以第一行作为标题来了解字段名称,并浏览前100个(可自定义的)记录以确定字段类型。

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

如果有多个标题行或其他复杂性,请使用Text file input

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

答案 1 :(得分:1)

由于事实

  1. 每个供应商最多有一个供应商。
  2. 如果没有匹配项,您必须做些事情。

我建议以下流程:enter image description here

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

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