前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每天一道大厂SQL题【Day29】腾讯数据提取(二)过去一周内的曝光点赞数据

每天一道大厂SQL题【Day29】腾讯数据提取(二)过去一周内的曝光点赞数据

作者头像
Maynor
发布2023-10-13 11:56:42
2322
发布2023-10-13 11:56:42
举报

每天一道大厂SQL题【Day29】腾讯数据提取(二)过去一周内的曝光点赞数据

大家好,我是Maynor。相信大家和我一样,都有一个大厂梦,作为一名资深大数据选手,深知SQL重要性,接下来我准备用100天时间,基于大数据岗面试中的经典SQL题,以每日1题的形式,带你过一遍热门SQL题并给出恰如其分的解答。

一路走来,随着问题加深,发现不会的也愈来愈多。但底气着实足了不少,相信不少朋友和我一样,日积月累才是最有效的学习方式!

第29题 需求二: 过去一周内的曝光点赞数据

1. 需求列表

需要输出一张中间 dws 层表:要求能够查询每个视频创建者 user_id 最近发布的 3 个视频,在过去一周内的曝光,点赞数据

需要产出字段:视频创建者 user_id,曝光用户,点赞用户数,曝光次数、点赞次数

思路分析

首先使用WITH子句定义了三个临时表:

  • recent_videos:查询过去一周内发布的所有视频,并使用ROW_NUMBER()函数为每个视频创建者的视频分配一个行号,按照视频创建时间降序排列。
  • top_3_videos:从recent_videos表中选择行号小于等于3的视频,即每个视频创建者最近发布的3个视频。
  • video_action:将top_3_videos表与t_user_video_action_d表连接,以获取每个视频创建者最近发布的3个视频在过去一周内的曝光和点赞数据。使用聚合函数计算曝光用户数,点赞用户数,曝光次数和点赞次数。

最后,从video_action表中选择所需字段即可。

答案获取

建议你先动脑思考,动手写一写再对照看下答案,如果实在不懂可以点击下方卡片,回复:大厂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

娱乐、新闻、搞笑

代码语言:javascript
复制
-- 建表
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;

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-10-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 每天一道大厂SQL题【Day29】腾讯数据提取(二)过去一周内的曝光点赞数据
    • 第29题 需求二: 过去一周内的曝光点赞数据
      • 1. 需求列表
      • 思路分析
    • 答案获取
      • 加技术群讨论
        • 附表
          • 文末SQL小技巧
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档