统计分钟级别的视频在线用户数+列炸裂+repeat函数

news2025/6/26 12:57:12

统计分钟级别的视频在线用户数

1、原始数据如下:

uid  vid  starttime  endtime
select 'aa' as uid,'v00l' as vid,'2023-10-25 12:00' as starttime,'2023-10-2512:15' as endtime 
union

select 'bb' as uid,'v002' as vid,'2023-10-25 12:05' as starttime,'2023-10-25 12:19' as endtime

结果如下:

 

2、需求分析

  • 将用户看视频的时间拆解到分钟
  • 现在能算出用户看视频的时长(分钟),并且知道用户看视频的开始时间,如果拆解到分钟级别观看记录呢?
  • 肯定涉及到列转行,但是如何拆分成 时长单位(分钟) 个 分钟级别观看记录行? 

3、完整代码如下

3.1、实现一:repeat+explode+row_number()over(partitions by )

--step6、统计每分钟看视频的用户数,并按照时间排序
select 
    each_online_minute,from_unixtime(each_online_minute,'yyyy-MM-dd hh:mm') as minute_lab bel,count(distinct uid) online_uid_cnt 
from
(--step5、形成每个用户看视频的分钟级别的观看记录
   select
        uid,vid,starttime,starttimestamp, endtime, endtimestamp,min_cnt
        ,row_number()over(part: ition by uid,vid,starttime order by endtimestamp) rk
        ,starttimestamp+60*row_number()over(partition by uid,vid,starttime order by endtimest tamp) as each_online_minute 
   
   from
   (--step4、explode列炸裂
       select uid,vid, starttime,starttimestamp ,endtime,endtimestamp, min_cnt,new_repeat 
       from
       (--step3、用repeat产生持续时长(分钟) 个数组
           select uid,vid,starttime,starttimestamp,endtime,endtimestamp,min_cnt,repeat('a,',mir n_cnt-1) as repeat_str 
           from
           (--step2、转化为时间戳,且计算看视频持续时长(分钟)
              select 
                 uid
                 ,vid
                 ,starttime
                 ,unix_timestamp(starttime,'yyyy-MM-dd hh:mm' ) as starttimestamp
                 ,endtime
                 ,unix_timestamp(endtime, 'yyyy-MM-dd hh:mm' ) as endtimestamp
                 ,(unix_timestamp(endtime,'yyyy-MM-dd hh:mm')-unix_timestamp(starttime,'yyyy-Mr M-dd hh:mm'))/60 as min_cnt 
              from
              (--step1、获取原始数据
                  select 'aa' as uid,'v0ol' as vid,'2023-10-25 12:00' as starttime,'2023-10-2512:15' as endtime 
                  union
                  select 'bb' as uid,'v0o2' as vid,'2023-10-25 12:05' as starttime,'2023-10-25 12::19' as endtime
              )tb_base
           )tb_tmp
       )tb_final
       lateral view explode(split(repeat_str,',')) tb_tmp as new_repeat
   )tb_outer
) tb
group by each_online_minute
order by each_online_minute asc
3.2、实现二:  repeat+posexplode

--step6、统计每分钟看视频的用户数,并按照时间排序
select 
    each_online_minute,from_unixtime(each_online_minute,'yyyy-MM-dd hh:mm') as minute_lab bel,count(distinct uid) online_uid_cnt 
from
(--step5、形成每个用户看视频的分钟级别的观看记录
   select
        uid,vid,starttime,starttimestamp, endtime, endtimestamp,min_cnt
        ,starttimestamp+60*repeat_pos as each_online_minute 
   
   from
   (--step4、explode列炸裂
       select uid,vid, starttime,starttimestamp ,endtime,endtimestamp, min_cnt,new_repeat,repeat_pos 
       from
       (--step3、用repeat产生持续时长(分钟) 个数组
           select uid,vid,starttime,starttimestamp,endtime,endtimestamp,min_cnt,repeat('a,',mir n_cnt-1) as repeat_str 
           from
           (--step2、转化为时间戳,且计算看视频持续时长(分钟)
              select 
                 uid
                 ,vid
                 ,starttime
                 ,unix_timestamp(starttime,'yyyy-MM-dd hh:mm' ) as starttimestamp
                 ,endtime
                 ,unix_timestamp(endtime, 'yyyy-MM-dd hh:mm' ) as endtimestamp
                 ,(unix_timestamp(endtime,'yyyy-MM-dd hh:mm')-unix_timestamp(starttime,'yyyy-Mr M-dd hh:mm'))/60 as min_cnt 
              from
              (--step1、获取原始数据
                  select 'aa' as uid,'v0ol' as vid,'2023-10-25 12:00' as starttime,'2023-10-2512:15' as endtime 
                  union
                  select 'bb' as uid,'v0o2' as vid,'2023-10-25 12:05' as starttime,'2023-10-25 12::19' as endtime
              )tb_base
           )tb_tmp
       )tb_final
       lateral view posexplode(split(repeat_str,',')) tb_tmp as repeat_pos,new_repeat
   )tb_outer
) tb
group by each_online_minute
order by each_online_minute asc

4、相关hive函数介绍

4.1、reverse返回字符串反序

       用法:reverse('foobar')参数类型string,返回值string,例如:

        select reverse('foobar')
      --返回:raboof

4.2、space返回指定n个空格字符串

用法:space(10)参数类型int,返回值string   例如:

select space(10)
--返回:'         '

4.3、repeat返回字符串重复n次后的字符串

用法:repeat('a',10)   例如:

select repeat('a',10)
--返回:'aaaaaaaaaa'

 4.3、split将字符串按指定分隔符,拆分为数组 用法:

select split('a,b,c,d',',')
--返回:["a","b","c","d"]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1200389.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

笔记:AI量化策略开发流程-基于BigQuant平台(二)

五、模型训练股票预测 完成了数据处理,接下来就可利用平台集成的各算法进行模型训练和模型预测啦。本文将详细介绍“模型训练”、“模型预测”两大模块操作、原理。 模型训练和模型预测是AI策略区别于传统量化策略的核心,我们通过模型训练模块利用训练…

为什么Android 手机这么慢?如何提高 Android 手机的运行速度

速印机(理想、荣大等)、复印机(夏普、东芝、理光、佳能、震旦等全系列)、打印机、扫描仪、传真机、多媒体教学一体机、交互式电子白板、报警器材、监控、竞业达监考设备及其它监考设备、听力考试设备、特种安防设备维护及维修。吴…

Linux必备:这十个流程图让你变的更强!

图是我们与信息联系并处理其重要性的绝佳方法;它们有助于传达关系和抽取信息,并使我们能够可视化概念。 从基本工作流程图到复杂的网络图,组织图,BPMN(业务过程模型和符号),UML图等等&#xff0…

面试10000次依然会问的【ThreadLocal】,你还不会?

ThreadLocal简介与基本概念 ThreadLocal,即线程局部变量,是Java语言中用于实现线程数据隔离的一个重要类。这种机制允许在多线程环境中,每个线程都有自己的变量副本,从而使得每个线程都可以独立地改变自己的副本,而不…

JDK1.8 新特性(一)【默认方法、静态方法和Lambda表达式】

前言 今天学习Java8 新特性,主要是之前在学习 Scala、JavaFX 中遇到一些 Lambda 表达式,感觉 lambda 表达式确实很简洁,很有必要学一学。 目录 前言 1、接口的默认方法与静态方法 编写接口 编写接口的实现类 测试 2、Lambda表达式&am…

YOLO目标检测——交通标志分类数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用:交通标志识别数据集在自动驾驶、交通安全监控、智能交通系统、驾驶员辅助系统和城市规划等领域都有广泛应用的潜力数据集说明:交通标志分类数据集,真实场景的高质量图片数据,数据场景丰富,含多场景白天黑…

Linux之gdb

gdb就是一个Linux的调试工具,类似与vs里面的调试 可执行程序也有格式,不是简单的二进制堆砌

PyCharm因安装了illuminated Cloud插件导致加载项目失败

打开Pycharm时会有弹窗提示: The license for Illuminated Cloud is invalid or has expired. All Illuminated Cloud features will be disabled. 这个弹窗会导致你加载项目一直失败,close project 也关不掉,我都是用任务管理器杀死进程的…

DevChat全能型AI编程助手,助你“以一敌三卷翻好友”

DevChat全能型AI编程助手,助你“以一敌三卷翻好友” 什么是DevChat,它能帮助我们做什么? DevChat是OpenAI的一个产品,它是一个可以进行编程相关对话的AI。这意味着你可以使用它来解决一些编程上的问题或者获取关于编程的建议。 …

Doris:读取Doris数据的N种方法

目录 1.MySQL Client 2.JDBC 3. 查询计划 4.Spark Doris Connector 5.Flink Doris Connector 1.MySQL Client Doris 采用 MySQL 协议,高度兼容 MySQL 语法,支持标准 SQL,用户可以通过各类客户端工具来访问 Doris。登录到doris服务器后&a…

基于SSM框架的高校试题管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

交换机工作原理

交换机工作原理 交换机功能:端口扩展(默认同一网络),如果只是两台设备进行通信,可以直接连接这两台设备而不用交换机,但如果设备较多,设备没有那么多接口,那么这个时候就需要交换机…

智慧水利整体解决方案:PPT全文43页,附下载

关键词:智慧水利发展前景,智慧水利解决方案,智慧水利建设方案,智慧水利平台系统 一、智慧水利建设背景 传统水利系统存在一些问题: 现有基础感知不能满足更高标准的水利管理需求;决策调度支撑能力亟需加强…

ztree结合hmap使用经验分享

项目背景 在建德封控拦截系统(Vue3antd2.x)为追求更快的地图初始化体验,在尝试了hmap2.5.0版本以及2.6.3版本后,由于这两个版本在现场电脑的初始化速度不够流畅,最终使用的是hmap2.1.3版本。同时由于布控选设备&#…

c语言练习第11周(1~5)

数列 1 1 2 3 5 8 13 21 ... 被称为斐波纳数列。 输入若干个正整数N,输出这个序列的前 N 项的和。 题干数列 1 1 2 3 5 8 13 21 ... 被称为斐波纳数列。 输入若干个正整数N,输出这个序列的前 N 项的和。输入样例3 5 4 1输出样例…

ftp服务器(filezilla服务端软件)下载、安装、使用

下载 通过360软件管家下载 输入filezilla,点击搜索,点击安装 修改安装路径 等待安装完成 配置服务端 启动配置 双击打开,点击软件中间按钮 不用输入密码,因为安装的时候没有设置密码 如果在安装的时候设置了密码,…

可以为一个servlet定义多个servlet-mapping、或url-pattern

在web描述符文件web.xml文件中,可以为同一个servlet定义多个servlet-mapping;也可以在同一个servlet-mapping中,定义多个url-pattern。也就是说,可以把多个地址(相对于上下文路径)映射到同一个servlet处理。…

基于MATLAB的关节型六轴机械臂轨迹规划仿真

笛卡尔空间下的轨迹规划,分为直线轨迹规划和圆弧轨迹规划,本文为笛卡尔空间下圆弧插值法的matlab仿真分析 目录 1 实验目的 2 实验内容 2.1标准D-H参数法 2.2实验中使用的Matlab函数 3 全部代码 4 仿真结果 1 实验目的 基于机器人学理论知识&…

最全面的软考架构师复习资料(历时2年整理)

一、面向服务的架构 1.请分别用200字以内文字说明什么是面向服务架构(SOA)以及ESB在SOA的作用与特点 面向服务的体系架构(SOA)是一种粗粒度、松耦合的服务架构,服务之间通过简单、精确定义接口进行通信。他可以根据需求…

【操作系统】4.2 文件系统

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…