我有一张超过10万条记录的“城市”表。 字段“name”包含“Roma”,“La Valletta”等字符串。
我收到一个带有城市名称的文件,大写均为“ROMA”。 当我搜索“ROMA”时,我需要获取包含“Roma”的记录的id。
在SQL中,我必须做类似的事情:
PerfMeas
我怎么能用水壶做这个?
注意:如果找不到城市,我会使用插入/更新字段来创建它,因此我必须避免使用区分大小写的名称生成重复项。
答案 0 :(得分:2)
您可以使用Pentaho Kettle中的字符串操作步骤。将Lower/Upper
选项设置为Y
将城市(名称)从City表传递到String操作步骤,这将执行数据流的大写,即城市名称。加入/查找收到的文件并获取所需的ID。
有关pentaho wiki的字符串操作步骤的更多信息。
答案 1 :(得分:0)
您可以使用'数据库加入'步。在这里你可以编写sql:
select id from city where upper(name) = upper(?)
并从文本文件中指定城市字段名称作为参数。使用'要返回的行数'和'外连接?'你可以控制连接行为。
此解决方案不适用于大量行,因为它将每行执行一个查询。在那些情况下,Rishu的解决方案更好。
答案 2 :(得分:0)
这就是我的做法:
创建查询的第一个“修改的JavaScript值”步骤:
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
这个系统会查询文件的行,但它使用的内存缓存很少