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

Pentaho PDI/Kettle-将数据从上一个跃点传递到数据库查询,pentaho,kettle,Pentaho,Kettle,我对PDI和Ketter还不熟悉,我以为是一个简单的实验来教自己一些基础知识,结果却变成了很多挫折 我想检查数据库以查看是否存在特定记录(即供应商)。我想通过读取平面文件(.CSV)获取供应商的名称 我的第一个障碍是仅从CSV中的8个字段中选择供应商名称 第二个障碍是如何在数据库查询中使用该供应商名称作为变量 我的第三个问题是数据库查找要使用哪种类型的步骤 我尝试了动态SQL查询,但无法确定如何使用变量构建查询,以及如何将所需的值传递给变量 数据库表(VendorRatings)有30个字段,其

我对PDI和Ketter还不熟悉,我以为是一个简单的实验来教自己一些基础知识,结果却变成了很多挫折

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

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

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

我的第三个问题是数据库查找要使用哪种类型的步骤

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

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

我最大的努力是使用以下动态查询: 从VENDORRATINGS中选择*其中VENDORRATINGS=


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

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

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

它将第一行作为标题,以了解字段名称,并探索第一个100(可自定义)记录以确定字段类型

如果名称不在第一行,请取消选中显示的
标题行
,按
获取字段
按钮,然后更改面板上的名称

如果有多个标题行或其他复杂性,请使用
文本文件输入


这同样适用于
查找步骤
:使用
获取查找字段
按钮并删除不需要的字段

最佳实践是
流查找
。对于主流程(VendorRating)中的每个记录,根据其标识符(可能是其编号或名称或firstname+lastname)在参考文件(CSV)中查找供应商详细信息(查找字段)

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

它将第一行作为标题,以了解字段名称,并探索第一个100(可自定义)记录以确定字段类型

如果名称不在第一行,请取消选中显示的
标题行
,按
获取字段
按钮,然后更改面板上的名称

如果有多个标题行或其他复杂性,请使用
文本文件输入


这同样适用于
查找步骤
:使用
获取查找字段
按钮并删除不需要的字段

由于

  • 每个供应商最多有一个供应商
  • 如果没有对手,你必须做点什么
  • 我建议采用以下流程:

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


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

    由于

  • 每个供应商最多有一个供应商
  • 如果没有对手,你必须做点什么
  • 我建议采用以下流程:

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


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

    每个供应商有多少供应商?只有一个还是多个?当/如果供应商没有VendorRating时会发生什么?您将哪一步称为“动态查询”。对于
    动态SQL行
    ,您需要在字段中构建SELECT…WHERE Vendor=”“。对于
    输入表
    ,您将丢失表中不存在的所有字段。@a表明表中每个供应商只有一个VENDORRATING。如果CSV文件中没有给定供应商的评级,则应导致新的跃点,CSV中的所有8个字段将作为新行插入VENDORRATING中。@AlainD yes,我指的是动态SQL行。根据一些研究,它似乎是一个动态查询的选项。看起来这是一条糟糕的道路(没有双关语)。动态SQL行可能是一个答案。例如,如果您需要
    选择SUM(field)
    ,但一般来说,构建包含查询的字符串需要一些工作。每个供应商有多少个VendorRating?只有一个还是多个?当/如果供应商没有VendorRating时会发生什么?您将哪一步称为“动态查询”。对于
    动态SQL行
    ,您需要在字段中构建SELECT…WHERE Vendor=”“。对于
    输入表
    ,您将丢失表中不存在的所有字段。@a表明表中每个供应商只有一个VENDORRATING。如果CSV文件中没有给定供应商的评级,则应导致新的跃点,CSV中的所有8个字段将作为新行插入VENDORRATING中。@AlainD yes,我指的是动态SQL行。根据一些研究,它似乎是一个动态查询的选项。看起来这是一条糟糕的道路(没有双关语)。动态SQL行可能是一个答案。例如,如果您需要
    选择SUM(f