【问题标题】:Case statement using different columns in Talend在 Talend 中使用不同列的案例语句
【发布时间】:2016-08-29 21:33:56
【问题描述】:

我有一个案例陈述如下

col1 like '%other%' then 'No' else col5 end as col5 的情况

在这里,就像在 SQL 中一样,我需要用不同的列实现 case 语句,并在 talend 中对单词“other”进行通配符检查,这怎么做?

【问题讨论】:

  • 列总是动态的吗?你知道要找的词吗?
  • 列不是动态的,我想注意“其他,请说明”,“其他不需要”这样的词,所以我必须注意其他

标签: talend


【解决方案1】:

您的问题不清楚,没有任何截图或解释。 我假设您有一些输入组件,例如带有行的 tOracleInput,在模式中有多个列。我建议使用 tMap 组件来操作模式的内容,尤其是 Expression Builder。

附:我个人更喜欢 tJavaFlex 用于列验证/操作,这样代码更易读,但它是更先进的技术。

【讨论】:

  • 我的源是 tfileinputdelimited,目标是 tfileoutputdelimited。我将不得不执行说检查列 product_category,如果它有单词“其他”,那么在 product_code 中将值设置为“无数据”
【解决方案2】:

如果列不是动态创建的,你可以在tMap中添加一个case。

因此,对于新的布尔列,您可以创建表达式:

row1.mycolumn1.toLowerCase().contains("other") ? new Boolean.true : new Boolean.false;

布尔字段将保存检查值。

编辑

由于此处不需要新的布尔列,因此您的具体要求如下所示:

row1.product_code.toLowerCase().contains("other") ? "No data" : row1.product_code;

【讨论】:

  • 嗨 Tobi,这不是我必须输出数据的布尔列。我来解释一下,如果 product_category 在其文本中包含“其他”一词,那么 product_code 应设置为“无数据”
【解决方案3】:

请按以下方式查找输入。
col1 col2 col3 col4 col5
---- ---- ---- ---- ---- ----
aaaother aaa aaa aaa aaa
其他bbb bbb bbb bbb bbb
ccc ccc ccc ccc ccc

在 tMap 中,您必须在表达式生成器中针对 col5 使用以下语句

input.col1.contains("other")?"No":input.col5

那么输出将如下

col1 col2 col3 col4 col5
---- ---- ---- ---- ---- ----
aaaother aaa aaa aaa 没有
otherbbb bbb bbb bbb 没有
ccc ccc ccc ccc ccc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    • 1970-01-01
    • 2022-10-16
    • 1970-01-01
    • 2021-05-03
    相关资源
    最近更新 更多