美文网首页
Hive中对相邻访问时间进行归并分组

Hive中对相邻访问时间进行归并分组

作者: 数据人阿多 | 来源:发表于2023-05-23 16:43 被阅读0次

背景

对用户每天的访问次数进行统计时,需要对用户访问页面相邻的时间间隔小于30分钟归并为一组(算是一次),这样可以统计出用户每天的访问次数(忽略隔天问题)。这个问题如果用python来处理可能比较方便,可以循环遍历每行,进行两两之间的比较。利用Hive来处理数据,劣势就是不能循环遍历不够灵活,但是也能处理,只是过程相对比较复杂

模拟数据与预想的效果

归并分组

创建测试数据

--创建临时表
create table test.tmp_datashare
(user_id string comment '用户id',
url string comment '网页',
create_time string comment '访问时间')
comment '用户访问日志'
row format delimited fields terminated by '\t' lines terminated by '\n';

--加载数据
load data local inpath '/tmp/datashare.txt' overwrite into table test.tmp_datashare;

测试数据:

测试数据

数据处理过程

  • 数据处理的难点:
    1、时间处理需要用到 UNIX_TIMESTAMP 转换为时间戳
    2、运用窗口函数 LAG 提取前一行的访问时间
    3、再次运用窗口函数 SUM 进行归并分组
  • 具体代码如下:
with a as (select user_id,url,create_time,
            lag(create_time,1) over(partition by user_id order by create_time) as last_1_time
        from clwtest.tmp_datashare
    ),
    b as (select user_id,url,create_time,
        case 
            when last_1_time is null then 1
            when (unix_timestamp(create_time,'yyyy-MM-dd HH:mm:ss')-
                unix_timestamp(last_1_time,'yyyy-MM-dd HH:mm:ss'))/60<30 then 0
            else 1
        end as group_tmp
    from a
    ),
    c as (select user_id,url,create_time,
        sum(group_tmp) over(partition by user_id order by create_time) as group_id
    from b
    )
select user_id,url,create_time,group_id
from c
order by user_id,create_time

  • 结果数据:
    结果数据

历史相关文章


以上是自己实践中遇到的一些问题,分享出来供大家参考学习,欢迎关注微信公众号:DataShare ,不定期分享干货

相关文章

  • Swift 3.0 归并排序

    归并排序: 将序列每相邻两个数字进行归并操作,形成 floor ( n/2) 个序列,排序后每个序列包含两个元素 ...

  • Pandas 教程 — 不同类型电影的比较(1)

    对数据进行分组运算是数据分析中很常见的操作,如果数据存储在数据库,如 MySQL、Oracle、Hive 中,那么...

  • 图解Java Stream

    Java Stream提供了一套对数据进行操作的解决方法。 对数据的处理包含:分组,转化,归并,统计 等首先看分组...

  • Hive数据源实战

    Spark SQL支持对Hive中存储的数据进行读写。操作Hive中的数据时,必须创建HiveContext,而不...

  • (十四)Win10 IDEA环境下SparkSQL连接Hive的

    在之前的文章中介绍了通过spark-shell访问hive中数据的方法,那么在IDEA中应该怎样连接Hive并访问...

  • MySQL—GROUP BY和HAVING

    分组,对GROUP BY子句后面跟随的列名进行分组,然后对每一个分组而不是整个表进行操作。 举例:在产品表中,检索...

  • Hive调优

    Fetch抓取(Hive可以避免进行MapReduce)Hive中对某些情况的查询可以不必使用MapReduce计...

  • Shardingsphere内核剖析之归并引擎

    功能划分:分为遍历、排序、分组、分页和聚合 5 种类型。结构划分:分为流式归并、内存归并和装饰者归并,装饰者归并可...

  • 排序算法 希尔、归并排序

    希尔排序与归并排序都是分组进行比较,但是希尔排序是组间比较,归并排序是组内排序 希尔排序 设置一个增量gap,从第...

  • Hive的调优你都知道那些?

    前言 一、Fetch抓取(Hive可以避免进行MapReduce) Hive中对某些情况的查询可以不必使用Map...

网友评论

      本文标题:Hive中对相邻访问时间进行归并分组

      本文链接:https://www.haomeiwen.com/subject/wemlsdtx.html