2017-08-28 114 views
0

我正在开发ETL。第一步是文本文件输入,它将来自“附加输出字段”的一些元数据添加到流中,包括文件名和上次修改。根据数据库查询的结果继续流式传输

我必须向DB进行查询,以验证具有最后修改日期时间的文件名是否已经被处理。如果是这样,流必须停止,并且下一步不能被处理。

这可能吗?我用google搜索了一下,发现没有例子。

回答

0

Pentaho并行处理所有步骤,所以这种线性抽象可能有点混乱。

你需要做的是不返回行,如果不想继续处理。如果后续步骤接收到0行,则它们不会执行任何操作。

有一些方法可以做到这一点:

  1. 构建的方式您的SQL查询,它只是返回的行是否存在具有相同名称的文件
  2. 使用开关步骤+检测到空流+过滤行以确保只有当你没有从你的查询结果时,行才会进入下一步
0

你将很快面对的问题是:“如果我尝试开始我的转换已经开始?”。这听起来像是一个学术问题,直到你的crontab开始僵局,或者你的用户抱怨你三周前的数据被重复计算。

您需要检查job。与所有步骤并行运行的转变相反,工作条目依次运行。您可以使用Scripting/SQL条目并输入条件,如this question中所述的logdate<now()-10minutes

现在,您的规范还有一个更强大的体系结构:将所有传入文件放入特定文件夹,处理它们然后将它们移动到归档目录。事实上,在处理之前将它们移动到存档中,避免重复加载。