开发自定义Talend组件:如何创建不需要输入或输出的真正自定义项?

时间:2019-07-08 16:15:00

标签: java components talend

为了连接到soap API以获取一些分析数据,我必须使用自定义库和自定义代码来触发请求并将结果下载为CSV文件。

PoC是在Talend之外完成的,一切工作都很好。

现在,我需要将这些内容集成到Talend工作中。在不重新开发Talend中已经包含的过程的情况下,尽可能简单地开发一些东西。

例如,我想开发一个简单的组件,该组件需要在params中使用基本凭据,并且只需执行查询并下载csv结果即可。 然后,我将能够使用tFileInputDelimited解析csv文件并继续我的Talend作业。 它在某些时候可以工作,但是我无法清除为使第二个PoC正常工作而做出的修改……因为Talend阻止了我这样做。


阅读所有(很少)文档(

我发现您只能创建3种类型的组件。

  • 不需要任何输入的输入组件[I] =>,如果它不依赖于某些父作业,它将自动触发,并且必须紧随其后的是另一个组件来处理其结果。

    [I] --> (...)
    
  • 输出组件[O] =>接受输入,但没有输出(例如,行记录器)。由于它依赖于父组件,因此无法单独运行。

    (...) --> [O]
    
  • 称为处理器[P]的混合组件,无非就是输出组件,它也可以产生某种结果,因此可以与另一个组件链接(但这不是强制性的)。但由于它只是输出组件的替代版本,因此它必须依赖于父

    (...) --> [P] --> (...)
    

好吧,让我列出我需要我的组件做的事情,然后看看最适合的组件:

  1. 它必须能够触发自身,因为它不需要任何输入
  2. 工作完成后,必须发送“ onComponentOk”事件
  3. 它不一定需要任何输出组件,因为结果不是要链接到下一个组件的东西,而只是表示“嘿,csv文件已准备好,在您知道的位置找到它”的信号。

是的!完善。现在,让我们找到适合每种需求的组件类型:

  1. =>输入组件
  2. =>输入,输出和处理器组件
  3. =>输出和处理器组件

那么满足所有这些要求的是哪一个?没有人...


(为简化起见,在本文的其余部分中,让我们考虑“输出”和“处理器”组件是相同的。)

所以我尝试了两种可能的实现:

  • 使用输入组件,它将可以正常工作。但是,如果我在我的产品之后不连接其他组件,Talend将不会编译我的工作。所以这很糟糕,但是我必须有一个组件(不要)使用我的(非)结果来构建工作。 这让我发疯。

  • 使用处理器组件,它将可以正常工作,这一次我不必再连接另一个组件。但是,如果我的组件初始化例程不接收任何数据,它将永远不会运行。因此,我必须连接一个伪造的组件以启动(不需要)数据到我的组件中(不需要任何操作)。 bhwaAAAAAAAA !!!

因此,我阅读了在该主题上可以找到的所有内容,甚至尝试了一些神秘的仪式。但是我找不到任何(干净的)解决方案!

我还尝试弄乱Talend工具箱的Java批注,以禁用输入或输出。

帮助,如果有人知道有关Talend工具包的秘诀,那我的耳朵就会张开。

但是我认为答案是重新考虑问题。 因为它来自我的要求,不适合Talend的可能性。 我知道我应该产生结果数据。但是为什么要重新开发tFileInputDelimited ???我将不得不维护更多的代码,并且我不想重复。

在理想情况下,一种解决方案是将输出的csv文件路径发送到下一个组件。但是不幸的是,tFileInputDelimited似乎无法从先前的组件输出中设置其配置。 但是我可能是错的。老实说,我两周前才开始与Talend合作。我只知道其中的1%。

有人有什么主意吗?

1 个答案:

答案 0 :(得分:0)

可能有一些变通办法,使用globalMap在跨作业的组件之间传递文件名并重用tFileDelimited。

但是听起来您的组件只是一个输入,应该使用commons-csv或另一个lib来“即时”读取文件并避免使用临时文件-重用,不要重复使用;)。 为什么要封装它?因为它使格式封装在组件中,并且作业更加稳定。您也不想在组件之间传播本地文件路径,而是记录已经加载到内存中的记录,这将使您能够在Talend Pipeline Designer中部署组件,并在以后根据需要直接在云中运行。请注意,即使在工作室中,它也可以减少由于作业周围的副作用而引起的潜在问题(文件不属于作业,而是您的文件系统)。

唯一的小技巧是,如果您不想构建输出,数据集和数据存储,则禁用某些验证,因为默认情况下,该插件鼓励良好做法,但Studio容忍禁用这些做法,使您只能进行输入。也就是说,数据存储区和数据集对该组件具有价值,因为您将能够在工作室中将它们用作模板/元数据。

最后,只需要更改作业中的输入,而不用进行作业前重新布线。因此,从长远来看,仅输入IMHO听起来可能更简单。