Hive中的主要功能

时间:2017-12-08 21:07:32

标签: hive lead

我正在尝试在特定的“name2”之后检索下一个“name1”。例如,“name2”中“complete2”之后的下一个“name1”是“init3”。这是我使用的查询,但它返回null。

    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%";

1 个答案:

答案 0 :(得分:2)

这是解决方案

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子句。

希望这有帮助!