Talend - tmap - 表达式过滤器 - 如何过滤值列表

Posted

技术标签:

【中文标题】Talend - tmap - 表达式过滤器 - 如何过滤值列表【英文标题】:Talend - tmap - expression filter - how to filter against a list of values 【发布时间】:2021-12-23 03:46:23 【问题描述】:

我有一个要过滤的值列表。由于此列表中的数字和内容是动态的,因此无法通过 .equals 处理静态查询。

我当前的过滤器是硬编码的:

row1.col1.equals("3810")||row1.col1.equals("3811")

我要使用的是更像 SQL 的语句:

row1.col1 in (listOfValues) 其中 ListOfValues 可以由变量或上下文给出。我找不到任何适合过滤列表的内容。

任何帮助将不胜感激

【问题讨论】:

值 3810、3811 等存储在数据库中、全局变量中、上下文中?因为我猜你的要求需要通过 Talend Routine 传递。 是的,这些值来自数据库。我将此逗号分隔的列表存储在一个全局变量中,以便在表达式过滤器中进一步使用。 【参考方案1】:

这个解决方案对我有用:

我编写了一个 java 帮助程序类,它将来自 row1 的输入值与存储在全局变量中的有效值列表进行比较。要与首先拆分和修剪的字符串进行比较以获取列表中的单个值。简短检查来自 row1 的给定输入值是否在此列表中,我使用了 .contains 方法。返回值(布尔值)将成为过滤与否的标准。

public class FileTransferBranchFilter 


    public static boolean contains(String checkMCU, String lovMCU) 
        
        /* lovMCU = list of valid MCUs in comma separated format
         * this list has to be splitted in single values for comparison
         * lpad with blanks to 12 digits is necessary for comparison 
         * of the MCU to be checked with the filter list*/
        
        String[] result = lovMCU.trim().split("\\s*,\\s*");
        List<String> lov = Arrays.asList(result);
        checkMCU = checkMCU.trim();
        
        
        
    //  System.out.println("eine Liste der gültigen MCUs" + Arrays.toString(result));
    //  System.out.println("die zu überprüfende MCU: " + checkMCU);
        
        if(lov.contains(checkMCU)) 
            //System.out.println("die zu überprüfende MCU befindet sich somit in der Liste der gültigen MCUs --> " + checkMCU);
            return true;
        else 
            //System.out.println("die zu überprüfende MCU befindet sich somit nicht in der Liste der gültigen MCUs --> " + checkMCU);
            return false;
               
    

这里是表达式生成器中的表达式:

【讨论】:

以上是关于Talend - tmap - 表达式过滤器 - 如何过滤值列表的主要内容,如果未能解决你的问题,请参考以下文章

在 Talend 中读取 Access DB 提取

使用 Talend 循环遍历 .csv 文件

无法使用 Talend 上传到 Snowflake 阶段,NoSuchMethodError

使用 talend 或 sqoop 将数据从 hbase 导入 hdfs

使用 talend 使用 GPDB 执行 while 循环

在Talend中读取Access DB Extract