hive - 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
解决方案
您已经有了根据会话对值进行分组的发生列。使用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
推荐阅读
- javascript - 关闭 Materialize CSS Modal 后,“modal-overlay”仍然存在 - 我们如何在不触摸覆盖的情况下关闭它?
- python-3.x - 打开 cv 比较两个人脸嵌入
- python-3.x - Windows 上的 Python3 多处理使在 Linux 上运行的 ZeroMQ 代码崩溃
- sql-server - 如何将因“数据库错误”而被拒绝的行加载到关系表中
- javascript - 如何通过 ajax 和 MVC 控制器正确填充下拉列表
- unit-testing - 开玩笑的单元测试问题:“找不到模块”
- c# - 如果分配了新集合,是否有必要取消订阅 ObservableCollection 中项目的事件?
- cypress - 如何使用 cypress 进行拖放
- python-3.x - Cython 将 python 数组转换为向量[char]
- kubernetes - 如何从节点通过 ClusterIP 访问 Openshift 服务