一.统计此题需要多表连接嵌套,需要使用到的内置处理函数有:
1.order by desc :字段按照降序排列(不加desc默认升序)
2.lateral view :(侧写表,关联)
用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlia
3.explode:将 hive 一列中复杂的 Array 或者 Map 结构拆分成多行
4.group by:按字段分数查询
5.count():聚合函数,求总数量
二.相关的字段表与解释
三.步骤:
第一步:查询视频热度前50位的视频 分类和相关视频id
select
views,
category about_category,
relatedId about_id_array
from
video
order by
views
desc limit 50; t1
第二步:打散相关视频id,再把视频分类和每个id一一对应起来
select
t1.about_category cate,
about_id
from ()t1
lateral view
explode(t1.about_id_array) tmp_table as about_id; t2
第三步:再将视频分类打散,与每个视频id对应起来
select
id
from
() t2
lateral view
explode(t2.cate) tmp_t as id; t3
第四步:再通过分组计算出分类字段的数量,然后降序排列
select
count(t3.id) count_id,
t3.id category_name
from
()t3
group by
t3.id
order by
count_id desc;