【问题标题】:How to make groups in an input and select a specific row in each of them in Talend?如何在输入中创建组并在 Talend 中的每个组中选择特定行?
【发布时间】:2021-12-13 20:03:52
【问题描述】:

我正在处理 Talend 转换过程(我们使用的是 Talend 6.4)。 ,我不知道如何实现当前的要求。

我有一个输入:

  • 两列是我的组键(帐户和产品),但不是唯一的(同一帐户 x 产品对可能出现在多行中)
  • 标准列(合同结束日期),这将帮助我决定要为每个组保留哪一行
  • 一些“尾”数据需要传递到下一个处理步骤(合同号)

要执行的规则是:

  • 每组只保留一条记录
  • 所选记录必须是没有结束日期的记录,或者如果所有记录都有结束日期,则必须有最大的结束日期
  • 选择的记录可以是随机的,以防出现平局

查看将这些规则应用于一些虚拟数据的转换:

我想首先做以下事情:

  1. 按帐户、产品、结束日期排序(空值在前)
  2. 每组“先选”

但我不够熟练,无法知道 Talend 中是否存在第二个转换。

问候,

皮埃尔

【问题讨论】:

    标签: etl talend


    【解决方案1】:

    非常有趣的 Talend 问题。 您需要创建类似此作业的内容。

    here a link to the zip file to import in your Talend

    【讨论】:

    • 感谢这个非常准确的答案。我们没有机会测试这种特定的方法,因为另一个开发人员提出了一种稍微不同的方法,并且确实有效(我将添加另一个答案来描述我们所做的)。如果你有时间,你能描述一下每种解决方案的优缺点吗?谢谢!
    【解决方案2】:

    @MBDIA 的回答似乎奏效了,但我想分享一下我们为满足我们的要求所做的工作。

    在此处查看我们的 Talend 流程:

    第一个 tMap (tMap_3) 的作用类似于 tReplicate 和 tMap,并发送:

    • 在上层分支中只有 Account 和 Product 引用,然后由 tAggregateRow_1 去重。
    • 在较低的分支中,所有数据和计算字段使我们能够处理缺少日期的情况(而不是默认为 31/12/9999,我们计算我们使用的标志(0 或 1)之后的排序步骤)。

    在流程的第二部分,我们首先将排序应用于 Account、Product、空日期标志(之前计算)、结束日期(desc)的整个数据,并使用第二个 tMap 在两个分支上进行连接(在帐户 x 产品上),仅保留 First Match 以便按照我们的要求保留第一条记录。

    【讨论】:

    • 我测试了你的答案,它也很完美。您的解决方案依赖于 TMAP 匹配模型。这是一种不同的方法,我真的很喜欢它,因为它使用了更少的 talend 组件。我的解决方案与您的解决方案相比的唯一优势是,使用我的解决方案,当您需要获取多于第一行(前 n 行,其中 n 可能为 2 , 3, 4, 等等)。谢谢你的分享。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    相关资源
    最近更新 更多