在MySQL / Talend中为缺少的周末数据插入虚拟记录

时间:2018-09-25 20:35:03

标签: mysql talend

我有一个ETL作业,它将原始文件处理到MySQL数据库中。在进行分析时,我意识到我需要一个月中所有天的数据,而我的数据Feed中只有工作日的值。

我需要一种方法来插入缺少的日子的记录,以及前一天的数据。例如对于星期六和星期日,我想使用星期五的数据。如果缺少星期三,我可以使用星期二的数据。

从视觉上看,这就是我正在查看的内容:

**Day**  **Old Table**  **New Table**
Monday      Record 1    Record 1
Tuesday     Record 2    Record 2
Wednesday   Record 3    Record 3
Thursday    Record 4    Record 4
Friday      Record 5    Record 5
Saturday                Record 5
Sunday                  Record 5
Monday      Record 8    Record 8
Tuesday     Record 9    Record 9
Wednesday   Record 10   Record 10
Thursday    Record 11   Record 11
Friday      Record 12   Record 12
Saturday                Record 12
Sunday                  Record 12
Monday      Record 15   Record 15

有人可以推荐我一种方法吗?

我模糊的想法正在集中处理三个数据集:

1)包含所有日期值的温度数据集(例如,从年初到年底)

2)包含丢失记录的原始数据(dtst 1)

3)新数据,其中包含所有值(dtst 2)

我不知道该怎么做,但是如果我可以遍历temp数据集(dtst 1)中的所有值,则将值与原始数据中的日期相对应,然后将其推入新的数据集(dtst 2)中。如果我未在dtst 1中标识值,则使用从dtst 1提取的最后一行并将其推入dtst2。在循环执行结束时,我将在dtst中获得所有日期的数据2,以后可以用于分析。

2 个答案:

答案 0 :(得分:0)

您可以将tJavaRow放在Mysql组件之前,然后检查当前行中是否有空数据,同时还可以将先前传输的值保存在globalMap变量中以填充空值。

答案 1 :(得分:0)

tMemorizeRows是您要寻找的!

  

tMemorizeRows临时存储逐行序列中的传入数据数组,并通过从0索引每个已存储的行来实例化此数组。在任何给定时间存储的最大行数在“基本设置”视图中定义

在组件设置中,指定要存储的行数和要存储的列。在tMap中,您可以检查当前行值,如果它为空,则检索tMemorizeRows所存储的值。
您可以参考以下列:
<columnName>_tMemorizeRows_1[0]代表当前值,<columnName>_tMemorizeRows_1[1]代表上一行..etc。