HiveSQL大厂面试 各个视频的平均完播率

这篇具有很好参考价值的文章主要介绍了HiveSQL大厂面试 各个视频的平均完播率。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目说明

练习题目来自牛客网sq在线编程 大厂面试题各个视频的平均完播率_牛客题霸_牛客网 (nowcoder.com)

测试用例

create database nk_test;  //创建数据库
use nk_test;    //进入数据库

// 创建表
DROP TABLE IF EXISTS tb_user_video_log;
DROP TABLE IF EXISTS tb_video_info;
CREATE TABLE tb_user_video_log (
    id INT,
    uid INT,
    video_id INT,
    start_time timestamp,
    end_time ,
    if_follow TINYINT,
    if_like TINYINT,
    if_retweet TINYINT,
    comment_id INT
);

CREATE TABLE tb_video_info (
    id INT,
    video_id INT,
    author INT,
    tag string,
    duration INT,
    release_time date
);

// 插入数据
INSERT INTO tb_user_video_log(id, uid, video_id, start_time, end_time, if_follow, if_like, if_retweet, comment_id) VALUES
  (1, 101, 2001, '2021-10-01 10:00:00', '2021-10-01 10:00:30', 0, 1, 1, null),
  (2, 102, 2001, '2021-10-01 10:00:00', '2021-10-01 10:00:24', 0, 0, 1, null),
  (3, 103, 2001, '2021-10-01 11:00:00', '2021-10-01 11:00:34', 0, 1, 0, 1732526),
  (4, 101, 2002, '2021-09-01 10:00:00', '2021-09-01 10:00:42', 1, 0, 1, null),
  (5, 102, 2002, '2021-10-01 11:00:00', '2021-10-01 11:00:30', 1, 0, 1, null);

INSERT INTO tb_video_info(id, video_id, author, tag, duration, release_time) VALUES
  (1, 2001, 901, '影视', 30, '2021-01-01 7:00:00'),
  (2, 2002, 901, '美食', 60, '2021-01-01 7:00:00'),
  (3, 2003, 902, '旅游', 90, '2021-01-01 7:00:00');

描述

用户-视频互动表tb_user_video_log

id uid video_id start_time end_time if_follow if_like if_retweet comment_id
1 101 2001 2021-10-01 10:00:00 2021-10-01 10:00:30 0 1 1 NULL
2 102 2001 2021-10-01 10:00:00 2021-10-01 10:00:24 0 0 1 NULL
3 103 2001 2021-10-01 11:00:00 2021-10-01 11:00:34 0 1 0 1732526
4 101 2002 2021-09-01 10:00:00 2021-9-01 10:00:42 1 0 1 NULL
5 102 2002 2021-10-01 11:00:00 2021-10-01 11:00:30 1 0 1 NULL

(uid-用户ID, video_id-视频ID, start_time-开始观看时间, end_time-结束观看时间, if_follow-是否关注, if_like-是否点赞, if_retweet-是否转发, comment_id-评论ID)

短视频信息表tb_video_info

id video_id author tag duration release_time
1 2001 901 影视 30 2021-01-01 07:00:00
2 2002 901 美食 60 2021-01-01 07:00:00
3 2003 902 旅游 90 2021-01-01 07:00:00

(video_id-视频ID, author-创作者ID, tag-类别标签, duration-视频时长(秒), release_time-发布时间)

问题:计算2021年里有播放记录的每个视频的完播率(结果保留三位小数),并按完播率降序排序

:视频完播率是指完成播放次数占总播放次数的比例。简单起见,结束观看时间与开始播放时间的差>=视频时长时,视为完成播放。

输出示例

示例数据的结果如下:

video_id avg_comp_play_rate
2001 0.667
2002 0.000

解释:

视频2001在2021年10月有3次播放记录,观看时长分别为30秒、24秒、34秒,视频时长30秒,因此有两次是被认为完成播放了的,故完播率为0.667;

视频2002在2021年9月和10月共2次播放记录,观看时长分别为42秒、30秒,视频时长60秒,故完播率为0.000。

解决方案

mysql写法
SELECT t1.video_id,
ROUND(sum(if(t1.end_time-t1.start_time>=t2.duration,1,0))/count(t1.video_id),3) as avg_comp_play_rate
FROM tb_user_video_log as t1
LEFT JOIN tb_video_info as t2
USING(video_id)
WHERE year(start_time)=2021 
GROUP BY t1.video_id
ORDER BY avg_comp_play_rate DESC;
HiveSQL写法
SELECT t1.video_id,
ROUND(sum(if(unix_timestamp(t1.end_time)-unix_timestamp(t1.start_time)>=t2.duration,1,0))/count(t1.video_id),3) as avg_comp_play_rate
FROM tb_user_video_log as t1
LEFT JOIN tb_video_info as t2
on t1.video_id=t2.video_id
WHERE year(start_time)=2021 
GROUP BY t1.video_id
ORDER BY avg_comp_play_rate DESC;

HiveSQL大厂面试 各个视频的平均完播率

方案分析

​ 计算2021年里有播放记录的每个视频的完播率(结果保留三位小数),并按完播率降序排序。

​ 题目中说到有播放记录的视频,通过观察 tb_user_video_log表为播放记录表,所以我们使用第一个表为主表进行左连接就可以过滤没有播放记录的视频。

FROM tb_user_video_log as t1
LEFT JOIN tb_video_info as t2
on t1.video_id=t2.video_id

完播率:

视频2001在2021年10月有3次播放记录,观看时长分别为30秒、24秒、34秒,视频时长30秒,因此有两次是被认为完成播放了的,故完播率为0.667;

视频2002在2021年9月和10月共2次播放记录,观看时长分别为42秒、30秒,视频时长60秒,故完播率为0.000。

从题目给的解释中可以看出,当播放时长大于等于视频时长时为完播。对完播的视频进行计数除以总播放数就可以得到播放率。

sum(if(unix_timestamp(t1.end_time)-unix_timestamp(t1.start_time)>=t2.duration,1,0))/count(t1.video_id)

代码中使用了unix_timestamp函数(这是hive的一个时间函数其他时间函数地址:https://blog.csdn.net/m0_47792921/article/details/123892566),这个函数的作用是将时间转换为时间戳,在hive中如果直接使用时间相减是不行的,如果直接使用时间相减的结果也会是一个时间格式的数据不能与数字类型进行比较。所以我们要将时间转化成时间戳进行相减进行比较。使用sum和if

函数进行配合得出完播数。使用count计算所有的播放记录。最后使用round保留三位小数

HiveSQL大厂面试 各个视频的平均完播率

使用year函数取出年份过滤数据,使用group by对视频进行分组。

WHERE year(start_time)=2021 
GROUP BY t1.video_id

问题总结

​ 在没有发现问题之前,我创建表格使用的时间格式为date,当我把时间转换成时间戳的时候才发了大问题,因为date格式只包括年月日,不包含小时分钟和秒。

​ 如图(开始我以为是没有时间格式使用了to_date 是错误的to_date也会忽略分钟和秒)所示我传入的时间包含了小时分钟和秒,但是由于设计表时时间格式为date就自动忽略了小时分钟秒。最后我将时间格式改为时间戳的类型 timestamp 我才恍然大悟。

HiveSQL大厂面试 各个视频的平均完播率

我以为是没有时间格式使用了to_date 是错误的to_date也会忽略分钟和秒)所示我传入的时间包含了小时分钟和秒,但是由于设计表时时间格式为date就自动忽略了小时分钟秒。最后我将时间格式改为时间戳的类型 timestamp 我才恍然大悟。

HiveSQL大厂面试 各个视频的平均完播率

与mysql相比可以发现当时间相减的时候mysql返回的是数字类型可以和数字进行比较,然后hive相减还是时间不能与数字进行比较文章来源地址https://www.toymoban.com/news/detail-437539.html

到了这里,关于HiveSQL大厂面试 各个视频的平均完播率的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大厂视频面试,因为截屏作废

    大厂视频面试现在这么严格了么?无意间按到截屏直接显示面试作废,好在最后和HR解释了下,再约时间重新面。 作为一个面试过3、4家大厂,现在在鹅厂工作的过来人来说,上面遇到的这个问题是AI面,不用太担心,只需和HR说明重新面试即可。 大厂的面试没有外面说的那么

    2024年02月04日
    浏览(39)
  • 阿里、百度等大厂技术面试题汇总,音视频服务器开发框架

    一面(104min) 自我介绍。 线程和进程的区别。 线程安全。面试官追问是否了解volite,小金忘了没回答出来。面试官追问是否了解自旋锁,乐观锁,悲观锁等,小金回答了解但是没用过。 http是用什么实现的。 TCP和UDP的区别。 TCP为什么是可靠的。注意拥塞机制涉及的算

    2024年04月15日
    浏览(78)
  • python实现学生成绩管理程序,包含各科成绩的录入,计算各个学生的总分和平均分,统计各个科目的最高分、最低分和平均分。

            编程题目:使用python实现学生各科成绩的录入,计算各个学生的总分和平均分,统计各个科目的最高分、最低分和平均分。其中学生人数通过输入来决定,科目包括语文、数学和英语这三门课程。(保留一位小数)         1、实现各科成绩的录入,有多个学生和多

    2024年02月09日
    浏览(50)
  • 后端大厂面试-16道面试题

    1 java集合类有哪些? List是有序的Collection,使用此接口能够精确的控制每个元素的插入位置,用户能根据索引访问List中元素。常用的实现List的类有LinkedList,ArrayList,Vector,Stack。 ArrayList是容量可变的非线程安全列表,其底层使用数组实现。当几何扩容时,会创建更大的数组

    2024年02月07日
    浏览(47)
  • 详解Leetcode中关于malloc模拟开辟二维数组问题,涉及二维数组的题目所给函数中的各个参数的解读

    最近博主一直再刷Leetcode上有关c语言的题目,有些题目第一步就将我卡死了。为什么呢?因为题目中所给的函数里的参数的具体含义我既然都不知道是什么意思。当然在请教了一些大佬后我也顺利解决了,不然也不会有人和你们分享了,哈哈哈~ 我就已一个典型的题目来介绍

    2024年02月08日
    浏览(46)
  • 网络安全大厂面试题合集+面试题文档

    注:本套面试题,已整理成pdf文档,但内容还在持续更新中,因为无论如何都不可能覆盖所有的面试问题,更多的还是希望由点达面,查漏补缺。 ​ ​ 由于篇幅受限这只是一部分 使用参数化查询(优先) 对不可信数据进行校验 反射型XSS注入 存储型XSS注入 DOM型XSS注入 XSS

    2024年02月09日
    浏览(45)
  • 大厂首发,zookeeper面试题

    开头 消息队列 RocketMQ 是阿里巴巴集团基于高可用分布式集群技术,自主研发的云正式商用的专业消息中间件,既可为分布式应用系统提供异步解耦和削峰填谷的能力,同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠重试等特性,是阿里巴巴双 11 使用的核心产品。

    2024年03月14日
    浏览(43)
  • 网络安全大厂面试题

     自我介绍 有没有挖过src? 平时web渗透怎么学的,有实战吗?有过成功发现漏洞的经历吗? 做web渗透时接触过哪些工具 xxe漏洞是什么?ssrf是什么? 打ctf的时候负责什么方向的题 为什么要搞信息安全,对安全这一块有多大的兴趣,以后会不会转行,还是打算一直从事安全方

    2024年02月15日
    浏览(43)
  • 网络安全(大厂)面试题

    注:本套面试题,已整理成pdf文档,但内容还在持续更新中,因为无论如何都不可能覆盖所有的面试问题,更多的还是希望由点达面,查漏补缺。 ​ 1、拿到一个待检测的站,你觉得应该先做什么? 1.1 信息收集 ① 获取域名的whois信息,获取注册者邮箱姓名电话等。 ② 查询服

    2024年02月11日
    浏览(39)
  • 大厂面试题-什么是JVM

    JVM 全 称 是Java虚拟机,在聊什么是JVM之前,我们不妨看⼀下这张图。 从这张图中可以看出JVM所处的位置,同时也能看出它两个作用:     1、运⾏并管理 Java 源码⽂件所⽣ 成的Class⽂件,     2、在不同的操作系统上安装不同的 JVM ,从⽽实现了跨 平台的保证。 ⼀般情况下,

    2024年02月07日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包