每天一道大厂SQL题【Day28】腾讯数据提取(一)搞笑类型视频的曝光点赞数据

简介: 每天一道大厂SQL题【Day28】腾讯数据提取(一)搞笑类型视频的曝光点赞数据

第28题 需求一: 搞笑类型视频的曝光点赞数据

1. 需求列表

需求方需要视频号搞笑类型视频的曝光点赞时长等数据,请提供一张 ads 表。搞笑类型视频定义:视频类型为搞笑或者视频创建者类型为搞笑

需要产出字段:视频 id,视频创建者 user_id,视频创建者名称、当天曝光次数、当天点赞次数、近 30 天曝光次数、近 30 天点赞次数

思路分析

第一步,我先从视频表和用户行为表中筛选出当天的搞笑类型视频的曝光点赞数据,按照视频 id 和视频创建者 user_id 分组求和,得到一个子表 a。

第二步,我再从视频创建者表中获取视频创建者名称,和子表 a 连接,得到一个子表 b。

第三步,我再从视频表和用户行为表中筛选出近 30 天的搞笑类型视频的曝光点赞数据,按照视频 id 分组求和,得到一个子表 c。

第四步,我把子表 b 和子表 c 连接,得到最终的 ads 表,并插入到分区为 20210718 的目标表中。

答案获取

建议你先动脑思考,动手写一写再对照看下答案,如果实在不懂可以点击下方卡片关注, 回复:大厂sql 即可。

参考答案适用HQL,SparkSQL,FlinkSQL,即大数据组件,其他SQL需自行修改。

加技术群讨论

点击下方卡片关注后 联系我进群

附表

用户行为表:t_user_video_action_d分区:ds(格式 yyyyMMdd) 主键:user_id、video_id

含义:一个 user 对一个视频的所有行为聚合,每天增量字段:

字段名 字段含义 类型
user_id 用 户 id string
video_id 视 频 id string
expose_cnt 曝光次数 int
like_cnt 点赞次数 int

视频表:t_video_d

分区:ds(格式 yyyyMMdd)主键:video_id

含义:当天全量视频数据字段:

字段名 字段含义 类型 枚举
video_id 视 频 id string
video_type 视频类型 string 娱乐、新闻、搞笑
video_user_id 视频创建者 user_id string
video_create_time 视频创建时间 bigint

作者表:t_video_user_d

分区:ds(格式 yyyyMMdd)主键:video_user_id

含义:当天全量视频创建者数据

字段名 字段含义 类型 枚举
video_user_id 视频创建者 user_id string
video_user_name 名称 string
video_user_type 视频创建者类型 string 娱乐、新闻、搞笑
-- 建表
create table if not exists t_user_video_action_d (
user_id string comment "用户id", video_id string comment "视频id", expose_cnt int comment "曝光次数", like_cnt  int comment "点赞次数"
)
partitioned by (ds string);
create table if not exists t_video_d (
video_id  string comment ' 视 频 id', video_type    string comment ' 视 频 类 型 ', video_user_id     string comment '视频创建者user_id', video_create_time bigint comment '视频创建时间'
)
partitioned by (ds string);
create table if not exists t_video_user_d (
video_user_id string comment '视频创建者user_id', video_user_name string comment ' 名 称 ', video_user_type string comment '视频创建者类型'
)
partitioned by (ds string);

文末SQL小技巧

提高SQL功底的思路。

1、造数据。因为有数据支撑,会方便我们根据数据结果去不断调整SQL的写法。

造数据语法既可以create table再insert into,也可以用下面的create temporary view xx as values语句,更简单。

其中create temporary view xx as values语句,SparkSQL语法支持,hive不支持。

2、先将结果表画出来,包括结果字段名有哪些,数据量也画几条。这是分析他要什么。

从源表到结果表,一路可能要走多个步骤,其实就是可能需要多个子查询,过程多就用with as来重构提高可读性。

3、要由简单过度到复杂,不要一下子就写一个很复杂的。

先写简单的select from table…,每个中间步骤都执行打印结果,看是否符合预期, 根据中间结果,进一步调整修饰SQL语句,再执行,直到接近结果表。

4、数据量要小,工具要快,如果用hive,就设置set hive.exec.mode.local.auto=true;如果是SparkSQL,就设置合适的shuffle并行度,set spark.sql.shuffle.partitions=4;

目录
相关文章
|
6天前
|
SQL 存储 缓存
SQL Server 数据太多如何优化
11种优化方案供你参考,优化 SQL Server 数据库性能得从多个方面着手,包括硬件配置、数据库结构、查询优化、索引管理、分区分表、并行处理等。通过合理的索引、查询优化、数据分区等技术,可以在数据量增大时保持较好的性能。同时,定期进行数据库维护和清理,保证数据库高效运行。
|
27天前
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
30 10
|
21天前
|
SQL 移动开发 Oracle
SQL语句实现查询连续六天数据的方法与技巧
在数据库查询中,有时需要筛选出符合特定时间连续性条件的数据记录
|
28天前
|
SQL 存储 关系型数据库
添加数据到数据库的SQL语句详解与实践技巧
在数据库管理中,添加数据是一个基本操作,它涉及到向表中插入新的记录
|
29天前
|
SQL 存储 关系型数据库
SQL判断CHAR类型字段不为空的方法与技巧
在SQL查询中,判断一个CHAR类型字段是否不为空是一个常见的需求
|
29天前
|
SQL 数据挖掘 数据库
SQL查询每秒的数据:技巧、方法与性能优化
id="">SQL查询功能详解 SQL(Structured Query Language,结构化查询语言)是一种专门用于与数据库进行沟通和操作的语言
|
1月前
|
SQL 监控 数据处理
SQL数据库数据修改操作详解
数据库是现代信息系统的重要组成部分,其中SQL(StructuredQueryLanguage)是管理和处理数据库的重要工具之一。在日常的业务运营过程中,数据的准确性和及时性对企业来说至关重要,这就需要掌握如何在数据库中正确地进行数据修改操作。本文将详细介绍在SQL数据库中如何修改数据,帮助读者更好
143 4
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
79 0
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
34 0
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
44 0