【问题标题】:hive - replace value of next record based on current valuehive - 根据当前值替换下一条记录的值
【发布时间】:2018-09-26 22:37:06
【问题描述】:

我有如下图所示的数据集

is_session_change 值为 true 时,我正在为 session 列填充新值,并且我想将该会话值保留到 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

【问题讨论】:

  • 你试过解决它吗?如果是这样,请向我们展示您的尝试。
  • 感谢您的回复 Vamsi,我已尝试更新问题。

标签: hive hiveql


【解决方案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

【讨论】:

    猜你喜欢
    • 2021-11-27
    • 2018-02-17
    • 2019-03-24
    • 2012-06-19
    • 1970-01-01
    • 2013-09-24
    • 2022-01-19
    • 2012-03-26
    • 1970-01-01
    相关资源
    最近更新 更多