使用Java定制Pentaho Spoon组件

使用Java定制Pentaho Spoon组件,java,customization,pentaho,pentaho-spoon,pentaho-data-integration,Java,Customization,Pentaho,Pentaho Spoon,Pentaho Data Integration,很快我对Pentaho还是相当陌生的。我想知道这是否可能实现 过去我在SSIS方面有很多不好的经验,所以当时我决定使用C#开发自己的ETL。实际上,.Net只执行提取步骤。数据被插入到数据库中,其余的ETL由MSSQL查询引擎从txt文件中的普通SQL完成,该文件是.Net在MSSQL中读取和执行的 我的想法是从.Net迁移到Java,并使用Spoon特性。这样做的好处是我可以使用勺子的部件。示例中的表输出 我遇到的一个问题是一些平面文件出现了问题。在这个示例中,带重音的字母被分隔符字符替换,所

很快我对Pentaho还是相当陌生的。我想知道这是否可能实现

过去我在SSIS方面有很多不好的经验,所以当时我决定使用C#开发自己的ETL。实际上,.Net只执行提取步骤。数据被插入到数据库中,其余的ETL由MSSQL查询引擎从txt文件中的普通SQL完成,该文件是.Net在MSSQL中读取和执行的

我的想法是从.Net迁移到Java,并使用Spoon特性。这样做的好处是我可以使用勺子的部件。示例中的表输出

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

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

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

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


它是可行的,还是太复杂而不需要麻烦?

这是我的正确方法

在重音被分隔符替换的情况下,如果不是文件字符集问题,请首先查看。如果是,并且每个文件的字符集都不同,请按文件名或目录将字符集放入变量或某些逻辑中

如果不是字符集问题,则将文件作为一行字符串读取,并将其放入
javascript
步骤中,以使用regexp和split。
javascript
java
regex
步骤更容易处理,这些步骤都是不错的选择,但一开始就不够灵活

要查看文件是否已处理,请根据以下模式重新创建控制盘:将已处理的文件放在给定目录中,然后使用
文件存在
步骤处理它们或不处理它们(根据您的情况自由调整)

要执行文件中包含的SQL脚本,请读取字段中的内容,并将其交给
动态SQL行
步骤

你可以把所有这些都放在一个自定义插件中,所以每次你打开勺子,你都会有自己的步骤。这真的很容易做到,但说实话,有很长一段时间我不再这样做了。在其他转换或作业中使用
转换执行器
步骤要容易得多

当我们遇到这样的问题时,让我提到Pentaho Kettle解决方案书的第22章,它解释了(通过示例)如何从java调用Kettle。那很有趣


--如果您需要进一步的支持,请接受此答案,并发布新问题--

谢谢你的提示!事实上,在Eclipse中开发新组件并将它们附加到Spoon上比让一个jar执行Spoon并完成工作要好得多!转换执行器完成了吗?你能给我指一个教程吗?当然,Java将是最后一个解决方案。首先,我尝试使用修改后的JS值来处理它。有没有可能像我想处理sql代码那样,将js代码保存在txt文件中?我尝试了动态SQL行,它似乎要求SQL文件位于字段中。难道没有添加作业参数的地方,或指向sql文件的浏览按钮吗?是的,我还没有。在示例目录中,您有一个
转换执行器的示例,它位于您的spoon.bat(spoon.sh)附近。注意:作业和转换之间的区别在于,在trans中,所有步骤同时运行,而在作业中,它们是按顺序执行的。这允许您控制并行性,但可能会引起意外(阻止写锁、非自愿截断、变量分配太迟等)。不,修改后的Javascript值
不是动态的,因为您无法从字段或变量读取代码。原因是js代码必须与元数据(字段名、类型等)同步。是的,
动态SQL行
执行字段中包含的SQL。请注意,您可以在脚本中使用${variable},该脚本将由作业中定义的变量(或按“运行”按钮时指定的参数值)替换。
executesql脚本
执行变量中包含的脚本(按Crtl空格键查看变量下拉列表),前提是变量被指定为转换参数(右键单击任意位置、属性、参数等)。
executerowsql脚本
允许您在文件中给出SQL,但这最后一步需要一些反复试验