使用 Java 自定义 Pentaho Spoon 组件

Customize Pentaho Spoon components using Java

我对 Pentaho Soon 还是很陌生。我想知道这是否有可能实现。

过去我对SSIS有过很多不好的体验,所以我当时决定用C#开发自己的ETL。实际上,.Net 仅执行提取步骤。数据被插入到数据库中,其余的 ETL 由 MSSQL 查询引擎从 txt 文件中的正常 SQL 完成,.Net 在 MSSQL.[=11= 中读取和执行]

我的想法是从 .Net 迁移到 Java,并使用 Spoon 功能。优点是我可以使用 Spoon 的组件。 Table 示例输出。

我遇到的一个问题是一些平面文件损坏了。例如,带重音的字母被分隔符替换,所以我不能只告诉 ETL 工具使用分隔符拆分列,我首先需要验证存在多少个分隔符并在超出预期时进行处理。

我还需要验证文件是否已被处理,是否已完成通过网络复制等。我也不希望 SQL 代码存储在执行 SQL 脚本组件,我希望它们保存在普通的 txt 文件中,以便 Subversion 可以跟踪它们的变化,ETL 工具应该读取这些文件并将它们发送到 MSSQL 以执行。

所以,我的想法是使用 Spoon 的 GUI 来正常构建 ETL。然后使用 Eclipse 对其 SDK 进行开发以自定义执行。例如,我会在 GUI 中使用标准文本文件输入组件,但是我的 jar 会有自己的 class 扩展标准组件,它自定义负责接收行字符串并将其拆分为字段的方法,并且处理任何问题。

我的 jar 会实例化我的 class 而不是 Spoon 的,并将其对象提供给引擎。

它可行吗,还是太复杂了?

它对我来说是正确的方法。

如果重音符被分隔符代替,先看看是不是文件字符集问题。如果是,并且它因文件而异,请将字符集按文件名或目录放入变量或某些逻辑中。

如果不是字符集问题,则将文件作为一个字符串行读取并将其放入 javascript 步骤以使用正则表达式和拆分。 javascriptjavaregex 步骤更容易处理,后者是不错的选择,但开始时不太灵活。

看文件有没有被处理,按照下面的schema重新造轮子:将处理后的文件放到给定的目录下,然后用File exists步骤来处理(适应根据您的情况自由选择)。

要执行文件中包含的 SQL 脚本,请读取字段中的内容并将其提供给 Dynamic SQL Row 步骤。

您可以将所有这些都放在一个自定义插件中,这样每次您打开 spoon 时都会有自己的步骤。这真的很容易做到,但说实话,我已经很久没有这样做了。在其他转换或作业中使用 Transformation Executor 步骤要容易得多。

当我们遇到这类问题时,让我提一下 Pentaho Kettle Solution 一书的第 22 章,它解释了(通过示例)如何从 java 调用 kettle。太好玩了

-- 如果您需要进一步的支持,请接受这个答案,然后 post 一个新问题。 --