Kettle 数据库查找不区分大小写
Kettle database lookup case insensitive
我的 table "City" 有超过 10 万条记录。
"name" 字段包含 "Roma"、"La Valletta".
等字符串
我收到一个包含城市名称的文件,全部为大写,如 "ROMA"。
当我搜索 "ROMA".
时,我需要获取包含 "Roma" 的记录的 ID
在 SQL 中,我必须执行以下操作:
select id from city where upper(name) = upper(%name%)
如何在 kettle 中执行此操作?
注意:如果找不到城市,我会使用 Insert/update 字段来创建它,因此我必须避免由区分大小写的名称生成的重复项。
您可以使用 Pentaho Kettle 中的 字符串操作 步骤。将 Lower/Upper
选项设置为 Y
将城市(名称)从城市 table 传递到字符串操作步骤,这将执行数据流的大写,即城市名称。 Join/lookup 使用接收到的文件并获取所需的 ID。
更多关于 pentaho wiki 中的字符串操作步骤。
您可以使用 'Database join' 步骤。这里可以写sql:
select id from city where upper(name) = upper(?)
并指定文本文件中的城市字段名称作为参数。使用 'Number of rows to return' 和 'Outer join?' 您可以控制加入行为。
此解决方案不适用于大量行,因为它将对每一行执行一个查询。在这些情况下,Rishu 的解决方案更好。
我是这样做的:
创建查询的第一步 "Modified JavaScript value":
var queryDest="select coalesce( (select id as idcity from city where upper(name) = upper('"+replace(mycity,"'","\'\'")+"') and upper(cap) = upper('"+mycap+"') ), 0) as idcitydest";
然后我将此字符串用作动态 SQL 行中的查询。
之后,
IF idcitydest == 0 then
insert new city;
else
use the found record
此系统查询文件的行,但它使用很少的内存缓存
我的 table "City" 有超过 10 万条记录。 "name" 字段包含 "Roma"、"La Valletta".
等字符串我收到一个包含城市名称的文件,全部为大写,如 "ROMA"。 当我搜索 "ROMA".
时,我需要获取包含 "Roma" 的记录的 ID在 SQL 中,我必须执行以下操作:
select id from city where upper(name) = upper(%name%)
如何在 kettle 中执行此操作?
注意:如果找不到城市,我会使用 Insert/update 字段来创建它,因此我必须避免由区分大小写的名称生成的重复项。
您可以使用 Pentaho Kettle 中的 字符串操作 步骤。将 Lower/Upper
选项设置为 Y
将城市(名称)从城市 table 传递到字符串操作步骤,这将执行数据流的大写,即城市名称。 Join/lookup 使用接收到的文件并获取所需的 ID。
更多关于 pentaho wiki 中的字符串操作步骤。
您可以使用 'Database join' 步骤。这里可以写sql:
select id from city where upper(name) = upper(?)
并指定文本文件中的城市字段名称作为参数。使用 'Number of rows to return' 和 'Outer join?' 您可以控制加入行为。
此解决方案不适用于大量行,因为它将对每一行执行一个查询。在这些情况下,Rishu 的解决方案更好。
我是这样做的:
创建查询的第一步 "Modified JavaScript value":
var queryDest="select coalesce( (select id as idcity from city where upper(name) = upper('"+replace(mycity,"'","\'\'")+"') and upper(cap) = upper('"+mycap+"') ), 0) as idcitydest";
然后我将此字符串用作动态 SQL 行中的查询。
之后,
IF idcitydest == 0 then
insert new city;
else
use the found record
此系统查询文件的行,但它使用很少的内存缓存