我对Pentaho Soon还是很陌生的。我想知道这是否有可能实现。
过去,我在 SSIS 方面有很多不好的经历,所以我当时决定使用 C# 开发自己的 ETL。实际上,.Net 只执行提取步骤。数据入到数据库中,ETL的其余部分由MSSQL查询引擎从txt文件中的普通SQL完成,.Net在MSSQL中读取和执行。
我的想法是从.Net迁移到Java,并使用Spoon功能。优点是我可以使用Spoon的组件。示例中的表输出。
我遇到的一个问题是一些平面文件被卷曲了。例如,带有重音符号的字母被分隔符替换,所以我不能只是告诉 ETL 工具使用分隔符拆分列,我首先需要验证存在多少个分隔符,如果超出预期,请进行处理。
我还需要验证文件是否已处理,是否已通过网络完成复制等。我也不希望 SQL 代码存储在执行 SQL 脚本组件上,我希望将它们保存在普通的 txt 文件中,以便 Subversion 可以跟踪它们的更改,ETL 工具应该读取这些文件并将它们发送到 MSSQL 执行。
所以,我的想法是使用 Spoon 的 GUI 来正常构建 ETL。然后使用 Eclipse 在其 SDK 上进行开发以自定义执行。例如,我会在 GUI 中使用标准文本文件输入组件,但随后我的 jar 将有自己的类扩展标准类,该类自定义负责接收行字符串并将其拆分为字段的方法,并处理任何问题。
我的jar将实例化我的类而不是Spoon的类,并将其对象提供给引擎。
它是可行的,还是太复杂而无法打扰?
它对我来说是正确的方法。
如果重音符号被分隔符替换,请先查看是否不是文件字符集问题。如果是并且它因文件而异,请按文件名或目录将字符集放入变量或某些逻辑中。
如果不是字符集问题,则将文件读取为一个字符串行,并将其放在javascript
步骤中以使用正则表达式和拆分。javascript
比java
或regex
步骤更容易处理,这些步骤是不错的选择,但开始时不太灵活。
要查看文件是否已处理,请根据以下模式重新发明轮子:将处理后的文件放在给定的目录中,然后使用File exists
步骤处理或不处理它们(自由适应您的情况(。
要执行文件中包含的 SQL 脚本,请在字段中读取它们的内容并将其提供给Dynamic SQL Row
步骤。
您可以将所有这些放在自定义插件中,因此每次打开勺子时,您都会有自己的步骤。这真的很容易做到,但说实话,很长一段时间我不再这样做了。在其他转换或作业中使用Transformation Executor
步骤要容易得多。
当我们遇到这类问题时,让我提一下Pentaho Kettle Solution一书的第22章,它解释了(举例(如何从java调用水壶。这真是太有趣了。
如果您需要进一步的支持,请接受此答案,并发布一个新问题。