【发布时间】:2019-11-18 04:51:31
【问题描述】:
为了连接到肥皂 API 以获取一些分析数据,我必须使用自定义库和自定义代码来触发请求并将结果下载为 CSV 文件。
PoC 在 Talend 之外完成,一切正常。
现在我需要将这些东西整合到 Talend 工作中。在不重新开发 Talend 中已包含的流程的情况下开发出尽可能简单的东西。
例如,我想开发一个简单的组件,它在参数中获取基本凭据,然后执行查询并下载 csv 结果。 然后我将能够使用 tFileInputDelimited 解析 csv 文件并继续我的 Talend 工作。 它在某些时候有效,但我无法清除我为第二个 PoC 工作所做的黑客攻击......因为 Talend 阻止我这样做。
阅读所有(少数)文档(
)
我发现你只能创建 3 种类型的组件。
-
一个不接受任何输入的输入组件 [I] =>,如果不依赖于某个父作业,它会自动触发,并且它必须后跟另一个组件来处理它的结果。
[I] --> (...) -
输出组件 [O] => 接受输入,但没有输出(例如行记录器)。由于它依赖于一个父组件,它不能自己运行。
(...) --> [O] -
一个称为处理器 [P] 的混合组件,它只不过是一个输出组件,它也可以产生一些结果,因此它可以与另一个链接(但这不是强制性的)。但由于它只是输出组件的替代版本,它必须依赖于父组件
(...) --> [P] --> (...)
好吧,让我列出我需要我的组件做什么,看看最适合什么:
- 它必须能够自行触发,因为它不需要任何输入
- 它必须在工作完成时发送一个“onComponentOk”事件
- 它一定不需要任何输出组件,因为结果不是链接到下一个的东西,而只是一个信号,说“嘿,csv 文件已准备好,在你知道的地方找到它”
是的!完美的。现在让我们找出适合每个要求的组件类型:
- => 输入组件
- => 输入、输出和处理器组件
- => 输出和处理器组件
那么哪一个符合所有这些要求?没有人...
(为简化起见,让我们认为输出和处理器组件在本文的其余部分是相同的。)
所以我尝试了两种可能的实现方式:
使用输入组件,它会正常工作。但是,如果我不在我之后连接另一个组件,Talend 就不会编译我的工作。所以这很糟糕,但我必须有一个组件(不要)使用我的(非)结果来构建工作...... 它让我发疯。
使用处理器组件,它会正常工作,这一次我不必在之后连接另一个组件。但是,如果它没有收到任何数据,我的组件初始化例程将永远不会运行。所以我必须连接一个假组件,将(无)数据输入我的组件(不需要任何东西)才能启动。哇哇哇哇哇哇!!!
所以我阅读了我能找到的关于这个主题的所有内容,甚至尝试了一些神秘的仪式。但我找不到任何(干净的)解决方案!
我还尝试使用 Talend 工具包 Java 注释来禁用输入或输出。
求助,如果有人知道有关 Talend 工具包的秘密提示,我会大开眼界。
但我认为答案是重新考虑问题。 因为它来自我不符合 Talend 可能性的要求。 我知道我应该产生一个结果数据。但是为什么要重新开发 tFileInputDelimited ???我将不得不维护更多代码,并且我不想重复。
在完美的世界中,一个解决方案就是将输出的 csv 文件路径发送到下一个组件。但不幸的是, tFileInputDelimited 似乎无法从以前的组件输出中设置其配置。 但我可能错了。老实说,我两周前才开始使用 Talend。我只知道其中的 1%。
有人知道吗?
【问题讨论】:
-
Talend 似乎用他们的新组件套件改变了很多东西。我已经为 TOS 6.x 开发了自定义组件,其中一些如您所述,不需要任何输入,也不需要产生输出,而且做起来并不复杂。
-
看看他们是如何实现的:tJava 或 tDbConnection 那些没有输入/输出链接,只是触发输入/触发输出
-
@BalazsGunics 是的,这就是我最先研究的内容......但我从来没有找到一种干净的方法来要求和导入我需要的库:/
标签: java components talend