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
按钮并删除不需要的字段。
由于
- 每个供应商最多有一个供应商评级。
- 如果没有匹配,你必须做点什么。
我建议以下流程:
读取 CSV 并在 table 中查找每一行(即:查找 table 是 SQL table 而不是 CSV 文件)。并在不匹配时设置默认值。我建议一些真正可见的东西,比如“--- NO MATCH ---”。
然后,如果不匹配,过滤器会将流重定向到替代操作(此处:插入 SQL table)。然后这两个流并合并到下游流中。
我是 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
按钮并删除不需要的字段。
由于
- 每个供应商最多有一个供应商评级。
- 如果没有匹配,你必须做点什么。
我建议以下流程:
读取 CSV 并在 table 中查找每一行(即:查找 table 是 SQL table 而不是 CSV 文件)。并在不匹配时设置默认值。我建议一些真正可见的东西,比如“--- NO MATCH ---”。
然后,如果不匹配,过滤器会将流重定向到替代操作(此处:插入 SQL table)。然后这两个流并合并到下游流中。