从转换中提取行为

Extracting behaviour from transformation

我有几个转换在实际 ETL 处理之前和之后都执行类似的功能:

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

因此,我创建了一个 "skeleton" 转换来执行所有这些操作,并通过将变量传递到转换位置来具有 "Run ETL process" 部分 "injected"。这样 "injected" 转换不需要知道文件处理步骤,文件处理步骤与实际的 ETL 过程分离。

由于我对 PDI 相当缺乏经验,所以我想知道这些问题通常是如何解决的,我的方法是否有用。

您的方法符合最佳实践。将已处理的文件移动到存档目录中是可行的方法,并且将状态 "In use"/"Finished" 保存在可从外部访问的数据库中非常方便。

传统上 您会在 parameters 中定义文件名和其他属性,而不是在数据库中进行转换。但是,将它们存储在数据库中允许您从外部访问它,甚至可以制作一个小型网络应用程序来显示状态。

您还可以在单​​独的转换中提取预处理和 post 处理 ETL,并在作业中编排整个过程。

我想您没有忘记在其他几个属性中包括文件大小(行数)。而且你有一个命名约定来帮助你重新运行这个过程,以防万一失败而不会头疼。

最后,我建议您也跟踪数据​​库中的日志。随便点一下,selectProperties/Parameters/Transformation,定义一个database connection+table,一个logging interval为2(秒),然后按 SQL 按钮。 您在底部 Step metrics table 中看到的所有内容(输入、输出...)都将保存在数据库中。当您发现上周出现问题时很有用。

你做得对。我猜您正在使用 映射步骤 来重用转换的公共部分:

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