首页 > 其他分享 >Hive 刷题——视频热度问题

Hive 刷题——视频热度问题

时间:2023-02-18 09:55:05浏览次数:29  
标签:00 热度 sum Hive video time id select 刷题

需求描述

现有用户视频播放记录表(user_video_log)如下。

uid
(球队名称)
video_id
(视频id)
start_time
(开始时间)
end_time
(结束时间)
if_like
(是否点赞)
if_retweet
(是否喜欢)
comment_id
(评论id)
101 2001 2021-09-24 10:00:00 2021-09-24 10:00:20 1 0 null
105 2002 2021-09-25 11:00:00 2021-09-25 11:00:30 0 1 null
102 2002 2021-09-25 11:00:00 2021-09-25 11:00:30 1 1 null
101 2002 2021-09-26 11:00:00 2021-09-26 11:00:30 0 1 null

视频信息表(video_info) 如下:

video_id
(视频id)
author
(作者id)
tag
(标签)
duration
(视频时长)
2001 901 旅游 30
2002 901 旅游 60
2003 902 影视 90
2004 902 美女 90

找出近一个月发布的视频中热度最高的top3视频。

注:热度=(a*视频完播率+b*点赞数+c*评论数+d*转发数)*新鲜度;

新鲜度=1/(最近无播放天数+1);

当前配置的参数a,b,c,d分别为100、5、3、2。

最近播放日期以 end_time-结束观看时间 为准,假设为T,则最近一个月按 [T-29, T] 闭区间统计。

当天日期使用视频中最大的end_time

结果中热度保留为整数,并按热度降序排序。

期望结果如下:

video_id
<int>
(视频id)
heat
<decimal(16,2)>
(热度)
2002 80.36
2001 20.33

解题思路

1、先计算热度因子

select video_id,
       sum((cast(if_like as int)))       if_like,
       sum((cast(if_retweet as int)))    if_retweet,
       sum(if(comment_id is null, 0, 1)) if_comment
from user_video_log
group by video_id

2、每个视频看完用户

select vi.video_id,
       sum(if(unix_timestamp(end_time) - unix_timestamp(start_time) = duration, 1, 0)) / sum(1) uv_rate
from video_info vi
         join user_video_log uv on vi.video_id = uv.video_id
group by vi.video_id

参考SQL

select video_id,heat
from (select video_id, hot heat, rank() over (partition by video_id order by hot desc ) rn
      from (select t.video_id,
                   (ceil(100 * uv_rate) + 5 * if_like + 3 * if_comment + 2 * if_retweet) / (new_date + 1) hot
            from (select u1.video_id, datediff(this_date, date_format(max(end_time), 'yyyy-MM-dd')) new_date
                  from user_video_log uv
                           join
                       (select video_id, date_format(max(end_time), 'yyyy-MM-dd') this_date
                        from user_video_log
                        group by video_id) u1
                       on uv.video_id = u1.video_id
                  group by u1.video_id, this_date) t
                     join
                 (select video_id,
                         sum((cast(if_like as int)))       if_like,
                         sum((cast(if_retweet as int)))    if_retweet,
                         sum(if(comment_id is null, 0, 1)) if_comment
                  from user_video_log
                  group by video_id) t1 on t.video_id = t1.video_id
                     join
                 (select vi.video_id,
                         sum(if(unix_timestamp(end_time) - unix_timestamp(start_time) = duration, 1, 0)) /
                         sum(1) uv_rate
                  from video_info vi
                           join user_video_log uv on vi.video_id = uv.video_id
                  group by vi.video_id) t2 on t.video_id = t2.video_id) t) i
where rn <= 3;

标签:00,热度,sum,Hive,video,time,id,select,刷题
From: https://www.cnblogs.com/wdh01/p/17113514.html

相关文章

  • 算法刷题 Day 42 | ● 01背包问题,你该了解这些! ● 01背包问题,你该了解这些! 滚动数组
    正式开始背包问题,背包问题还是挺难的,虽然大家可能看了很多背包问题模板代码,感觉挺简单,但基本理解的都不够深入。如果是直接从来没听过背包问题,可以先看文字讲解慢慢了......
  • 算法刷题 Day 41 | ● 343. 整数拆分 ● 96.不同的二叉搜索树
    343.整数拆分https://programmercarl.com/0343.%E6%95%B4%E6%95%B0%E6%8B%86%E5%88%86.html视频讲解:https://www.bilibili.com/video/BV1Mg411q7YJTips:动规五部曲,分......
  • 算法刷题-Excel表列序号、单词拆分 II、排序链表
    Excel表列序号(数学、字符串)给你一个字符串columnTitle,表示Excel表格中的列名称。返回该列名称对应的列序号。例如,A->1B->2C->3...Z->26AA->27AB->......
  • Hive
    HiveHive的相关概念Hive的架构图用户接口:包括CLI、JDBC/ODBC、WebGUI。其中,CLI(commandlineinterface)为shell命令行;Hive中的Thrift服务器允许外部客户端通过网络......
  • Hive 刷题——出勤率问题
    需求描述现有用户出勤表(user_login)如下。user_id(用户id)course_id(课程id)login_in(登录时间)login_out(登出时间)112022-06-0209:08:242022-06-0210:09:361......
  • Leetcode刷题
    双指针系列26.删除有序数组的重复项题目的大致意思就是给一个数组,要求你再数组中删除重复的项,并返回删除后数组的长度。思路在这里想引入一个过滤器的思想,思......
  • 数据结构刷题2023.02.16小记
    Hash函数冲突处理方式开放定址法再哈希法链地址法设置公共溢出区法不论线性表采用顺序存储结构还是链式存储结构,删除值为X的结点的时间复杂度均为O(n)。正确顺序......
  • HIVE - HIVEQL学习笔记
    HiveLearningHIVEQL和MYSQL最为接近数据操作SHOWTABLESINcrm_integrationShowtables'dim_con*' DESCRIBEEXTENDEDcrm_integration.itg_fact_sales_orderDE......
  • Hive 刷题——员工在职人数问题
    需求描述现有用户表(emp)如下。id(员工id)en_dt(入职日期)le_dt(离职日期)10012020-01-02null10022020-01-022020-03-0510032020-02-022020-02-15100......
  • 2023云原生开发者真实现状:K8s居容器榜首,Docker冲顶技术热词,微服务热度不减
    在数字化转型浪潮下,企业上云已成为企业和政府的普遍共识,云原生开发者迎来了最好的时代。从云原生概念提出后的爆炸式增长,到近年来进入稳定期,开发者也逐渐在各个技术领域中......