配置单元-根据当前值替换下一个记录的值

时间:2018-09-26 13:53:03

标签: hive hiveql

我具有如下图所示的数据集enter image description here

is_session_change 值为true时,我正在为 session 列填充新值,并且我希望将该会话值一直保留到 is_session_change 的下一个TRUE值为止。 strong>列。 例如下图-enter image description here

期望值_session列是期望值。请让我知道是否有人可以帮忙!提前致谢。 实际上,我每小时进行一次数据处理,特别是运行时,我正在处理当前时间数据以及过去一小时的数据,因此过去一小时的数据将正确地附加了会话ID,现在我正尝试将这些会话ID扩展为当前时间的合格记录,如果记录不符合扩展条件,我将生成新的会话ID。

我尝试了以下在会话列中填充值的方法-

select *,case when (session_id != '-1')  then session_id 
              when (new_session = true) then  getSessionId() 
              when (new_session =false AND session_id = '-1') then LAG(session_id) OVER (PARTITION BY uniquevisitor ORDER BY ts) 
        else '-' END as abc 
from mktg_web.web_session_final 
order by uniquevisitor

1 个答案:

答案 0 :(得分:1)

您已经具有“发生次数”列,可以根据会话对值进行分组。使用case表达式将-1的值设置为null,然后使用max窗口函数来获取Expected_session的值。

select w.*,max(case when session <> -1 then session end) 
           over(partition by uniquevisitor,occurrence) as expected_session 
from mktg_web.web_session_final w