Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Filter Talend ETL根据条件从一组行中筛选一行_Filter_Etl_Talend_Weekend - Fatal编程技术网

Filter Talend ETL根据条件从一组行中筛选一行

Filter Talend ETL根据条件从一组行中筛选一行,filter,etl,talend,weekend,Filter,Etl,Talend,Weekend,我在表X中有一组行,如下所示 job1 20170506 Sat Not Run job1 20170507 Sun Completed job1 20170508 Mon Not Run job1 20170513 Sat Completed job1 20170514 Sun Failed job1 20170515 Mon Not Run job1 20170520 Sat Not Run job1 20170521 Sun

我在表X中有一组行,如下所示

job1   20170506 Sat   Not Run
job1   20170507 Sun   Completed
job1   20170508 Mon   Not Run
job1   20170513 Sat   Completed
job1   20170514 Sun   Failed
job1   20170515 Mon   Not Run
job1   20170520 Sat   Not Run
job1   20170521 Sun   Not run
job1   20170522 Mon   Not Run
job2   20170506 Sat   Failed
job2   20170507 Sun   Not run
job2   20170508 Mon   Completed
job2   20170513 Sat   Completed
job2   20170514 Sun   Completed
job2   20170515 Mon   Completed
job2   20170520 Sat   Not Run
job2   20170521 Sun   Not run
job2   20170522 Mon   Not Run
 and so on.
我需要将周末周六、周日、周一作为一个单独的实体,并应得到如下结果表:

job1   20170507 Sun   Completed
job1   20170513 Sat   Completed
job1   20170522 Mon   Not Run
job2   20170508 Mon   Completed
job2   20170515 Mon   Completed
job2   20170522 Mon   Not Run
Table Y

20170506 Sat  20170508 Mon
20170513 Sat  20170515 Mon
20170520 Sat  20170522 Mon
如果作业在这三天中的任何一天内完成了条目,则视为已完成。否则,如果未全部运行,则将采用未运行的最新条目。在塔伦德,这怎么可能呢

我可以创建一个包含Sat到Mon间隔日期的表,如下所示:

job1   20170507 Sun   Completed
job1   20170513 Sat   Completed
job1   20170522 Mon   Not Run
job2   20170508 Mon   Completed
job2   20170515 Mon   Completed
job2   20170522 Mon   Not Run
Table Y

20170506 Sat  20170508 Mon
20170513 Sat  20170515 Mon
20170520 Sat  20170522 Mon

请告诉我一个想法,我应该使用tJava还是tIntervalMatch组件,这是怎么可能的。

好的。如果我清楚地理解你的要求,那么我想这就是你的答案

可输入->t完成外部连接->完成FLG=Y,然后全部设置 ^ | | LkpRecords仅记录完成状态,Complt_FLG为Y

如果Complt_FLG为null,则表示不是Y,然后使用taggregate并通过对作业id进行分组来获取max date记录

如果这是您想要的或有任何问题,请告诉我。

这是我的建议:

第一个子对象用于根据工作日向输入添加序列,并分离已完成和未完成的作业。为此,我使用以下tMap_23,其中两个流具有相同的shema:

新字段jobNumber包含jobname的值+一个由破折号job-1分隔的序列号,例如。由于序列基于工作日,与同一jobname关联的每一行都具有相同的jobNumber值。两个流的结果都存储在一个专用的tHashOutput中,此处称为Completed和NotCompleted

然后,启动第二个子对象以排除与已完成记录关联的未完成记录。这是tMap_24的作用: 这是一个基于jobNumber的经典内部联接。捕获内部联接被拒绝的记录,然后根据作业编号asc和execDate desc tSortRow_1进行排序,最后删除除第一个TONIQROW_6外具有相同作业编号的记录,并将结果附加到在第一个子作业RAWSRELT任务中调用的tHashOutput的末尾

最后一个子对象读取名为RawResult的tHashInput,删除额外字段jobNumber,根据之前的作业对所有记录进行排序,以便在控制台上显示结果:

希望这有帮助。扶轮基金会这里是我的答案:-

我已将这项任务分成两个主题

第一个子对象读取表Y的数据,并一次迭代一个周末。这里我已经将表Y的数据放入文件,请查找下面的快照链接。 在主subjob中,我们将获取变量max_date和min_date中的周开始和周结束日期,并将这两个日期传递给下一个子subjob

在子主题中,我们将从主文件中获取数据,并根据作业名称和日期对数据进行排序,并将记录传递给tjavaflex。请查找tSortRow属性和子主题的图像

子对象图像:

在子主题中,我创建了8个上下文变量:-

a。MIN_DATE:正在完成父项作业 BMAX_DATE:正在完成父项作业 CJOB_NAME:处理记录中作业的名称 D日期:是处理记录的作业的执行日期 E日期:是处理记录的作业的执行日期 F状态:作业的状态 G我们的工作是什么 H过时的 我外出日 J出局状态

OUT prefix变量是那些需要作为输出打印的变量

在tJavaflex中,我编写了逻辑,它检查传入行是否在一周之间,并检查状态是否为completed,一旦我们获得状态为completed,我们将设置标志为false。因此,对于相同的作业名称,它不会再次检查条件

一旦作业名称更改,标志值变为true,并在该周末再次重复上述步骤