从转换中提取行为

时间:2018-08-16 14:59:07

标签: etl kettle pentaho-data-integration

在实际的ETL处理之前和之后,我有几个转换都具有相似的功能:

  • 查看某些目录以查看是否出现了要集成的新文件(数据库中维护了目录)
  • 在数据库中将找到的文件标记为“正在使用”(并存储几个其他文件属性)
  • 将文件移动到“正在使用”子目录中
  • 运行ETL进程
  • 将文件标记为“完成”
  • 将文件移动到“完成的”子目录中

这些步骤是业务需求,并且基于文件输入,每个ETL流程都是100%相同的(除了要搜索的目录列表和注册文件的不同数据库表)。维持这个几乎相同的过程的X副本(如果必须更改所有全部,则不理想)

因此,我创建了一个“骨架”转换,可以完成所有这些操作,并通过将变量传递到转换位置来“注入”了“运行ETL过程”部分。这样,“注入”转换就不需要知道文件处理步骤,并且文件处理步骤与实际的ETL过程是分离的。

由于我对PDI完全没有经验,所以我想知道通常如何解决此类问题以及我的方法是否有效。

2 个答案:

答案 0 :(得分:1)

您的方法符合最佳实践。将处理过的文件移动到存档目录中是一种方法,将状态“正在使用” /“完成”保持在可从外部访问的数据库中非常方便。

传统上,您应该在转换中而不是数据库中的parameters中定义文件名和其他属性。但是,将它们存储在数据库中后,您可以从外部访问它,甚至可以制作一个小的Web应用程序只是为了显示状态。

您还可以在单​​独的转换中提取预处理和后处理ETL,并协调工作中的整个过程。

我想您没有忘记在其他两个属性中包括文件大小(行数)。并且您有一个命名约定,可以帮助您在失败的情况下重新运行该过程,而不会感到头疼。

最后,我建议您还跟踪数据库中的日志。只需单击任意位置,选择Properties / Parameters / Transformation,定义database connection + tablelogging interval为2(秒),然后按SQL按钮。 您在底部Step metrics表中看到的所有内容(输入,输出等)都将保存在数据库中。当您上周发现有问题时很有用。

答案 1 :(得分:-1)

您做对了。猜猜您正在使用映射步骤重用转换的常见部分:

https://wiki.pentaho.com/display/EAI/Mapping