首页 > 解决方案 > hive - 根据当前值替换下一条记录的值

问题描述

我有如下图所示的数据集在此处输入图像描述

is_session_change值为真时,我正在为会话列填充新值,并且我想携带该会话值直到is_session_change列的下一个 TRUE 值。例如下图 -在此处输入图像描述

列 expected_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

标签: hivehiveql

解决方案


您已经有了根据会话对值进行分组的发生列。使用case表达式设置-1null并使用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

推荐阅读