根据数据库查询结果继续流式传输

时间:2017-08-28 16:12:10

标签: pentaho etl pentaho-spoon pentaho-data-integration

我正在开发一个ETL。第一步是文本文件输入,它将来自"附加输出字段"的一些元数据添加到流中,包括文件名和最后修改。

我必须对DB进行查询,以验证是否已经处理了具有上次修改日期时间的文件名。如果是,则必须停止流,并且不得处理后续步骤。

这可能吗?我已经用Google搜索过,没有找到任何示例。

2 个答案:

答案 0 :(得分:0)

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

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

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

  1. 如果没有具有相同名称的文件,则以仅返回行的方式构建SQL查询
  2. 使用切换步骤+检测空流+过滤行,以确保只有当您的查询没有结果时,行才会进入后续步骤

答案 1 :(得分:0)

你很快就会面临的问题是:“如果我在转型时尝试开始转换怎么办?”这听起来像是一个学术问题,直到你的crontab开始陷入僵局,或者你的用户抱怨你对三周前的数据重复计算。

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

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