我有一个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,以后可以用于分析。
答案 0 :(得分:0)
您可以将tJavaRow放在Mysql组件之前,然后检查当前行中是否有空数据,同时还可以将先前传输的值保存在globalMap变量中以填充空值。
答案 1 :(得分:0)
tMemorizeRows是您要寻找的!
tMemorizeRows临时存储逐行序列中的传入数据数组,并通过从0索引每个已存储的行来实例化此数组。在任何给定时间存储的最大行数在“基本设置”视图中定义
在组件设置中,指定要存储的行数和要存储的列。在tMap
中,您可以检查当前行值,如果它为空,则检索tMemorizeRows
所存储的值。
您可以参考以下列:
<columnName>_tMemorizeRows_1[0]
代表当前值,<columnName>_tMemorizeRows_1[1]
代表上一行..etc。