Hive中的lead函数
Lead function in Hive
我正在尝试检索特定 "name2" 之后的下一个 "name1"。例如,"name2" 中 "complete2" 之后的下一个 "name1" 是 "init3"。这是我使用的查询,但它 returns 为空。
date_time name1 name2
2017-11-23 00:09:46 init1 complete1
2017-11-23 00:09:48 init2 complete2
2017-11-23 00:09:50 init3 complete3
select date_time,name1,name2,
lead(name1,1) over (order by date_time) as next_word
from tab1
where date_time between "2017-11-23 00:00:00" and "2017-11-23 23:59:59"
and name2 like "%complete2%";
这是解决方案
SELECT *
FROM (SELECT date_time,name1,name2,
LEAD(name1,1) over (ORDER BY date_time) AS next_word
FROM tab1
WHERE date_time between "2017-11-23 00:00:00" and "2017-11-23 23:59:59" ) v
WHERE name2 LIKE "%complete2%";
输出
2017-11-23 00:09:48 init2 complete2 init3
Hive 在应用 LEAD 之前评估 WHERE 条件。在您的查询中,将限制 LEAD 应用于没有 LEAD 的一条记录。
您可以像我上面那样使用子查询或使用 CTE/WITH 子句。
希望对您有所帮助!
我正在尝试检索特定 "name2" 之后的下一个 "name1"。例如,"name2" 中 "complete2" 之后的下一个 "name1" 是 "init3"。这是我使用的查询,但它 returns 为空。
date_time name1 name2
2017-11-23 00:09:46 init1 complete1
2017-11-23 00:09:48 init2 complete2
2017-11-23 00:09:50 init3 complete3
select date_time,name1,name2,
lead(name1,1) over (order by date_time) as next_word
from tab1
where date_time between "2017-11-23 00:00:00" and "2017-11-23 23:59:59"
and name2 like "%complete2%";
这是解决方案
SELECT *
FROM (SELECT date_time,name1,name2,
LEAD(name1,1) over (ORDER BY date_time) AS next_word
FROM tab1
WHERE date_time between "2017-11-23 00:00:00" and "2017-11-23 23:59:59" ) v
WHERE name2 LIKE "%complete2%";
输出
2017-11-23 00:09:48 init2 complete2 init3
Hive 在应用 LEAD 之前评估 WHERE 条件。在您的查询中,将限制 LEAD 应用于没有 LEAD 的一条记录。
您可以像我上面那样使用子查询或使用 CTE/WITH 子句。
希望对您有所帮助!