水壶数据库查找不区分大小写

时间:2017-09-04 17:27:19

标签: kettle pentaho-data-integration

我有一张超过10万条记录的“城市”表。 字段“name”包含“Roma”,“La Valletta”等字符串。

我收到一个带有城市名称的文件,大写均为“ROMA”。 当我搜索“ROMA”时,我需要获取包含“Roma”的记录的id。

在SQL中,我必须做类似的事情:

PerfMeas

我怎么能用水壶做这个?

注意:如果找不到城市,我会使用插入/更新字段来创建它,因此我必须避免使用区分大小写的名称生成重复项。

3 个答案:

答案 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

这个系统会查询文件的行,但它使用的内存缓存很少