【问题标题】:Filtering table column using multiple wildcards使用多个通配符过滤表列
【发布时间】:2016-11-18 13:43:08
【问题描述】:

这个问题与 Talend Open Studio 相关,但实际上属于 Regex Java 代码领域。

我需要过滤一个 MySQL 表来

  1. 在一列中排除字段名称并
  2. 传递包含在多个其他列中的字符串中出现的关键字排列的行。

使用 tMySQLInput --> tMap --> tMySQLInput 和 !row1.CAT1.equals("IT") 作为输入表达式,我已经成功实现了目标 1。

我无法找到如何使用 tFilterRow 或任何其他组件传递通配符列表。关键字是 %temp%、%recruit% 和 %sourc%。 (我使用 % 是因为它对我的 MySQL 查询很熟悉。)

我希望找到类似于:row1.ColumnName.contains(%temp%|%recruit%|%source%) 的内容,我可以将其放入 tMap 中的变量正则表达式过滤器或 tFilterRow 中的高级表达式。

我是 Java 编码的新手,因此我们将不胜感激任何最佳实践/建议/代码。感谢您的帮助,我从这个社区学到了很多东西。

【问题讨论】:

  • 不能在 MySQL 中做过滤吗?您提取的数据越少,您的工作就会越快。
  • 我已经考虑过这一点,并暂时将其作为暂缓执行,但我正在寻找 talend 提供的“可重复和自动化”选项。
  • 通过将过滤器推送到数据库,您可以节省大量时间,而且如果您处理 TB 级的数据,它将获得回报
  • 谢谢,我相信我会走那条路。是否有可能将 sql 代码从 talend 组件传递到数据库,并且仍然拥有数据库引擎的强大功能来完成这项工作?
  • 你能验证答案是否正确吗?

标签: java regex filter wildcard talend


【解决方案1】:

这行得通:

row3.Var1.contains("temp") || row3.Var1.contains("recruit") || row3.Var1.contains("source") ? row3.Var1 : "" 

但这就是你的要求吗?

【讨论】:

  • 感谢您的快速回复。这让我接近但得到这个......当我把!对此的声明... row1.Voucher_Header_Notes.contains("TEMP")||row1.Voucher_Header_Notes.contains("VIA")&&!row1.CAT1.equals("IT") ... 一开始我得到一个不同的数据集。表达是否对开头的部分赋予了更多的权重?
  • 你使用 row3 代替 row1 是否意味着表达式应该输入到 tmap 中的某个位置?
  • 我无法让包含||排除正常工作。我试过 row1.column.contains("X")||!(row1.column.contains("Y")), row1.column.contains("X")||!row1.column.contains("Y "), row1.column.contains("X")&&!(row1.column.contains("Y") 无济于事。我应该在 tmap 中的不同组件或不同位置使用排除表达式吗?应该和我可以将 tfilter 和 tmap 链接在一起吗?
  • 不,您将 row3 替换为 tmap 中输入链接的名称。对于 !row1.CAT1.eq‌​uals("IT") 您可以使用 Relational.NOT("IT".equals(row1.Voucher_Hea‌​der_Notes)) (首选 "string".equals(Variable) 而不是 Variable.equals ("string") 以避免空指针错误)。此外,您需要括号: (row1.Voucher_Header_Notes.contains("TEMP")||row1.Voucher_Hea‌​der_Notes.contains("‌​VIA")) && Relational.NOT("IT".equals(row1.Voucher_Hea‌​der_Notes) )
猜你喜欢
  • 2015-04-16
  • 2019-11-18
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 2014-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多