将Null替换为Pig/Hive中同一列中先前已知的行值
我在一列中有一个空值的数据集:将Null替换为Pig/Hive中同一列中先前已知的行值,hive,apache-pig,Hive,Apache Pig,我在一列中有一个空值的数据集: price time id 1 12:00:00 id1 10 12:00:00 id2 NULL 12:05:00 id1 NULL 12:05:00 id2 NULL 12:10:00 id2 2 12:10:00 id1 3 12:15:00 id1 NULL 12:20:00 id1 NULL 12:25:00 id1 4 12:30:00
price time id
1 12:00:00 id1
10 12:00:00 id2
NULL 12:05:00 id1
NULL 12:05:00 id2
NULL 12:10:00 id2
2 12:10:00 id1
3 12:15:00 id1
NULL 12:20:00 id1
NULL 12:25:00 id1
4 12:30:00 id1
我想为Pig或Hive中每个id/时间的前一个已知行值为null的行添加值
因此,输出应为:
price time id
1 12:00:00 id1
10 12:00:00 id2
**1** 12:05:00 id1
**10** 12:05:00 id2
**10** 12:10:00 id2
2 12:10:00 id1
3 12:15:00 id1
**3** 12:20:00 id1
**3** 12:25:00 id1
4 12:30:00 id1
非常感谢
编辑:这是我在配置单元中运行的内容:
Select price,time, id,last_value(price,true) over (partition by id order by time) as LatestPrice from table;
对于某些行(1000行),它工作正常,但对于较大的一组(24 M行),在完成100%映射器和100%还原器后,作业仍然从最后1天开始运行。有什么建议吗?你可以试试这样的
select
notNullTmp.price, tmp.id, tmp.time
(
select LAG(b.time, 1) over (PARTITION BY a.id ORDER BY a.time) as prev_time, b.time as time, b.id as id
FROM
(
select price, time, id
from table
where price is NOT NULL
) a
JOIN
(
select price, time, id
from table
where price is NULL
)b
ON (a.id = b.id)
) tmp
JOIN
(
select price, time, id
from table
where price is NOT NULL
) notNullTmp
ON (tmp.id = notNullTmp.id AND tmp.prev_time == notNullTmp.time)
UNION
select price, time, id
from table
where price is NOT NULL;
其思想是将空价格记录从非空价格记录中分离出来,然后在非空价格记录中查找每个空价格记录id作为条目。在为每个空价格条目选择价格后,我们将此数据与非空价格数据合并 你们能展示一些你们到目前为止已经尝试过的代码吗?我看起来像是:从表中选择price,time,id,last_value(price)over(partitionbyid-orderbytime)作为最新价格;