使用 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
步骤以使用正则表达式和拆分。 javascript
比 java
或 regex
步骤更容易处理,后者是不错的选择,但开始时不太灵活。
看文件有没有被处理,按照下面的schema重新造轮子:将处理后的文件放到给定的目录下,然后用File exists
步骤来处理(适应根据您的情况自由选择)。
要执行文件中包含的 SQL 脚本,请读取字段中的内容并将其提供给 Dynamic SQL Row
步骤。
您可以将所有这些都放在一个自定义插件中,这样每次您打开 spoon 时都会有自己的步骤。这真的很容易做到,但说实话,我已经很久没有这样做了。在其他转换或作业中使用 Transformation Executor
步骤要容易得多。
当我们遇到这类问题时,让我提一下 Pentaho Kettle Solution 一书的第 22 章,它解释了(通过示例)如何从 java 调用 kettle。太好玩了
-- 如果您需要进一步的支持,请接受这个答案,然后 post 一个新问题。 --
我对 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
步骤以使用正则表达式和拆分。 javascript
比 java
或 regex
步骤更容易处理,后者是不错的选择,但开始时不太灵活。
看文件有没有被处理,按照下面的schema重新造轮子:将处理后的文件放到给定的目录下,然后用File exists
步骤来处理(适应根据您的情况自由选择)。
要执行文件中包含的 SQL 脚本,请读取字段中的内容并将其提供给 Dynamic SQL Row
步骤。
您可以将所有这些都放在一个自定义插件中,这样每次您打开 spoon 时都会有自己的步骤。这真的很容易做到,但说实话,我已经很久没有这样做了。在其他转换或作业中使用 Transformation Executor
步骤要容易得多。
当我们遇到这类问题时,让我提一下 Pentaho Kettle Solution 一书的第 22 章,它解释了(通过示例)如何从 java 调用 kettle。太好玩了
-- 如果您需要进一步的支持,请接受这个答案,然后 post 一个新问题。 --