首页 > 数据库 >hivesql练习_会话划分问题

hivesql练习_会话划分问题

时间:2023-04-02 17:57:27浏览次数:34  
标签:good hivesql 练习 会话 home 100 101 id view

现有页面浏览记录表(page_view_events)如下,表中有每个用户的每次页面访问记录。

user_idpage_idview_timestamp
100 home 1659950435
100 good_search 1659950446
100 good_list 1659950457
100 home 1659950541
100 good_detail 1659950552
100 cart 1659950563
101 home 1659950435
101 good_search 1659950446
101 good_list 1659950457
101 home 1659950541
101 good_detail 1659950552
101 cart 1659950563
102 home 1659950435
102 good_search 1659950446
102 good_list 1659950457
103 home 1659950541
103 good_detail 1659950552
103 cart 1659950563

规定若同一用户的相邻两次访问记录时间间隔小于60s,则认为两次浏览记录属于同一会话。现有如下需求,为属于同一会话的访问记录增加一个相同的会话id字段,会话id格式为"user_id-number",其中number从1开始,用于区分同一用户的不同会话,期望结果如下:

user_id
<int>
(用户id)
page_id
<string>
(页面id)
view_timestamp
<bigint>
(浏览时间戳)
session_id
<string>
(会话id)
100 home 1659950435 100-1
100 good_search 1659950446 100-1
100 good_list 1659950457 100-1
100 home 1659950541 100-2
100 good_detail 1659950552 100-2
100 cart 1659950563 100-2
101 home 1659950435 101-1
101 good_search 1659950446 101-1
101 good_list 1659950457 101-1
101 home 1659950541 101-2
101 good_detail 1659950552 101-2
101 cart 1659950563 101-2
102 home 1659950435 102-1
102 good_search 1659950446 102-1
102 good_list 1659950457 102-1
103 home 1659950541 103-1
103 good_detail 1659950552 103-1

 

解答:

 1 with tt as(
 2   SELECT
 3   user_id,page_id,view_timestamp,
 4   lag(view_timestamp, 1, 0) over(partition by user_id order by view_timestamp) last_view_timestamp -- 获取上次一访问页面时间,默认值设为0
 5   FROM
 6   page_view_events
 7 )
 8 select
 9 user_id, page_id, view_timestamp,
10 concat(user_id, "-", sum(if(view_timestamp - last_view_timestamp > 60, 1, 0)) over(partition by user_id order by view_timestamp)) session_id -- 一次新会话,相邻两次访问时间大于60s。统计截至到当前时间共有几次会话
11 from tt

 

标签:good,hivesql,练习,会话,home,100,101,id,view
From: https://www.cnblogs.com/nananana/p/17280899.html

相关文章

  • Shell数组练习
    1、将/etc/shadow文件的每一行作为元素赋值给数组#!/bin/bash#统计行数,作为循环次数num=`wc-l</etc/shadow`for((i=0;i<=num;i++))do#根据i的变化取前i行内容再然后截取最后一行加入数组中array[$i]=$(head-$i/etc/shadow|tail-1)done#依次输出数组中......
  • hivesql练习_间断连续登录用户问题
    现有各用户的登录记录表(login_events)如下,表中每行数据表达的信息是一个用户何时登录了平台。user_idlogin_datetime1002021-12-0119:00:001002021-12-0119:30:001002021-12-0221:01:00现要求统计各用户最长的连续登录天数,间断一天也算作连续,例如:一个用户在......
  • C语言逆向——如何寻找main入口,一个反汇编成C的实战练习
    第二节2.3找程序的入口原文:https://www.showdoc.com.cn/fengxin1225/7054696489361869控制台应用程序的main函数入口在OD中找到以上其他中的函数,然后跟着3个参数的CALL就是main例:———————————————————- 第二节2.4.1逆向并还原为C代码(网上解答)......
  • shell练习2
    1.编写函数,实现打印绿色OK和红色FAILED判断是否有参数,存在为Ok,不存在为FAILED   2.编写函数,实现判断是否无位置参数,如无参数,提示错误      3.编写函数实现两个数字做为参数,返回最大值   ......
  • 练习——Arrays类小练
    packagecom.arrays_;importjava.util.Arrays;importjava.util.Comparator;publicclassArraysExercise{publicstaticvoidmain(String[]args){/*案例:自定义Book类,里面包含name和price,按price排序(从大到小)。要求使用两种方式排......
  • 练习——简单的定制排序
    packagecom.arrays_;importjava.util.Arrays;importjava.util.Comparator;publicclassArraysSortCustom{publicstaticvoidmain(String[]args){int[]arr={1,-2,0,2,32};bubble01(arr);System.out.println("排序结果&quo......
  • day3 函数的定义和调用,练习编写简单的程序(记录3)
    0331.h#ifndef_0331_H#define_0331_H/********************************************************************文件名称:0331.h*功能描述:函数的定义和调用的头文件*创建作者:wenjie*创建日期:2023/03/31*************************************************************......
  • day3 函数的定义和调用,练习编写简单的程序(记录1)
    一、函数的定义可以分为以下两种:1、函数声明和函数定义分离这种方法将函数声明和函数定义分开,通常在头文件中先声明函数原型,然后在源文件中实现函数定义。例如,头文件example.h中声明了一个函数add:#ifndefEXAMPLE_H#defineEXAMPLE_Hintadd(inta,intb);//声明函......
  • A模块练习题
    mysql练习题1.查找数据库版本号mysql>selectversion();2.查找数据库列表mysql>showtables;3.查看所有用户和权限,找到可以从任意IP地址访问mysql>showgrantsforroot@localhostmysql>selectdistinctconcat('user:''',user,'''@''',......
  • C语言编程练习_查找数组中不重复的数字
    题目描述:给定一个整形数组空间arr,数据中包含两个一样的数字若干,只有一个数字是单独一个。设计一个函数把这个出现一次的数字返回出来。 解决方案一:穷举法:假设arr数组中的每个元素都是重复的。也可能是不重复的(效率差)#include<stdio.h>intfun1(intarr[],intlen){  ......