gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:19:13 44 4
gpt4 key购买 nike

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

PoC在Talend之外完成,并且一切运行正常。

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

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



阅读所有(很少)文档(


https://talend.github.io/component-runtime/main/1.1.12/index.html
http://repo.apache.maven.org/maven2/org/talend/sdk/component/documentation/1.1.3/documentation-1.1.3-all-in-one.pdf




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


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

[I] --> (...)

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

(...) --> [O]

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

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



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


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


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


=>输入组件
=>输入,输出和处理器组件
=>输出和处理器组件


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



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

因此,我尝试了两种可能的实现:


使用输入组件,它将正常工作。但是,如果我在我的产品之后不连接其他组件,Talend将不会编译我的工作。所以这很糟糕,但是我必须有一个(不要)使用我的(非)结果来构建工作的组件.....
它让我疯狂。
使用处理器组件,它将可以正常工作,这次我不必再连接另一个组件。但是,如果我的组件初始化例程不接收任何数据,它将永远不会运行。因此,我必须连接一个伪造的组件以启动(不需要)数据到我的组件中(不需要任何操作)。 bhwaAAAAAAAA !!!


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

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

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

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

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

有人有什么主意吗 ?

最佳答案

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

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

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

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

关于java - 开发自定义的Talend组件:如何创建不需要输入或输出的真正自定义的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56938879/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com