Hive 实现查询用户连续三天登录记录

ops/2024/11/14 14:10:16/

标题:Hive 实现查询用户连续三天登录记录

在数据分析和处理中,经常会遇到需要查询特定条件数据的情况。本文将介绍如何使用 Hive 来查询用户连续三天登录的所有数据记录。

一、问题背景

我们有一个用户登录记录表,其中包含用户的登录日期信息。现在需要找出所有用户连续三天登录的记录。

二、数据准备

我们先创建一个名为user_log的表来存储用户登录记录,表结构如下:

create table user_log(id int,dt string
)
row format delimited
fields terminated by '\t';

然后使用以下命令加载数据:

load data local inpath '/home/hivedata/lianxu.txt' into table user_log;

假设我们的数据如下:

iddt
12024-04-25
12024-04-26
12024-04-27
12024-04-28
12024-04-30
12024-05-01
12024-05-02
12024-05-04
12024-05-05
22024-04-25
22024-04-28
22024-05-02
22024-05-03
22024-05-04

三、解决方案

(一)第一步:求解每行日期后面第三行的日期以及真正第三天的日期

使用窗口函数lead()和日期函数date_add()来计算每行日期后面第三行的日期和真正第三天的日期。

select*,lead(dt,2) over(partition by id order by dt) later3dt,date_add(dt,2) true3dtfrom user_log;

(二)第二步:判断是否连续登录三天

在上一步的基础上,通过比较后面第三行的日期和真正第三天的日期是否相等,来判断是否连续登录三天。如果相等,则标记为 1,否则为 0。

with t as (select*,lead(dt,2) over(partition by id order by dt) later3dt,date_add(dt,2) true3dtfrom user_log
) select *,if(later3dt==true3dt,1,0) num from t;

(三)第三步:筛选出连续登录三天的每个起始日期

从第二步的结果中筛选出标记为 1 的记录,即连续登录三天的起始日期。

with t as (select*,lead(dt,2) over(partition by id order by dt) later3dt,date_add(dt,2) true3dtfrom user_log
),t1 as (select *,if(later3dt==true3dt,1,0) num from t
)select * from t1 where num=1;

(四)第四步:表合并求最终结果

通过和一个包含 0、1、2 的列表进行笛卡尔积操作,得到连续三天的登录记录。

with t as (select*,lead(dt,2) over(partition by id order by dt) later3dt,date_add(dt,2) true3dtfrom user_log
),t1 as (select *,if(later3dt==true3dt,1,0) num from t
),t2 as (select * from t1 where num=1
) select id,dt,list,date_add(dt,d.list) dt2  from t2,(select explode(array(0,1,2)) list) d;

四、总结

通过以上步骤,我们可以使用 Hive 实现查询用户连续三天登录的所有数据记录。


http://www.ppmy.cn/ops/133114.html

相关文章

Kafka面试题(二)

1、Kafka的分区策略是什么? 1、假如指定了分区,就往这个分区发数据 2、如果没有指定分区,指定了Key值,那么对Key进行Hash,再对分区数取模后,得到哪个分区,就使用哪个分区 3、如果都没有指定&…

Elasticsearch日志收集成功但是展示不出来????

使用kibana查询日志的时候发现,怎么都查询不到日志,去服务器看了filebeat也正常运行,能收集到日志;重启kibana也没用。。。。。。。。。。 我擦。。。。。。。 看了眼索引,存储好大 然后就把一些不重要的索引删除后就…

丹摩征文活动|智谱AI引领是实现文本可视化 - CogVideoX-2b 部署与使用

文章目录 前言一、DAMODEL平台特性二、创建CPU云实例三、CogVedioX介绍四、DAMODEL一键部署CogVideoX1. 创建丹摩实例(参考上述介绍)2. 配置环境和依赖3. 模拟与配置文件4. 开始运行4.1 调试4.2 webUI4.3 端口映射 前言 DAMODEL(丹摩智算)是一款专为满足…

闯关leetcode——202. Happy Number

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/happy-number/description/ 内容 Write an algorithm to determine if a number n is happy. A happy number is a number defined by the following process: Starting with any positive inte…

零信任沙盒能为源代码保密带来哪些升级

在当今竞争激烈的商业环境中,源代码的安全保护对于任何依赖技术创新的公司来说都是至关重要的。SDC沙箱(Secret Data Cage)以其独特的十大特性,为源代码的安全提供了前所未有的保护。以下是SDC沙箱如何为源代码加密带来革命性效果…

SpringBoot(五)SpringBoot三层架构

博客项目的基本配置完成了。接下来我们要做的就是编写正式的功能了。先明确一下,我的博客前端是使用VUE3框架来编写,后端的SpringBoot框架只作为接口来使用。 接下来我们就进入到实现对应功能的阶段了,在这之前,我们先来回顾一下SpringBoot的三层架构的原理。 一:SpringBo…

运维故障与排查技巧

1.网络不通 问题:无法访问网络资源。 解决方法:检查物理线路,交换机端口,网卡驱动和配置,使用ping,traceroute等工具定位问题。 2.网络速度慢 问题:访问网络资源较慢。 解决方法&#xff1…

#渗透测试#SRC漏洞挖掘#CSRF漏洞的防御

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…