电影票房数据分析Hive
任务一
基于初始数据集,统计 2020 年上映的电影中,当前总票房最高的 10 部电影。
编程要求
在 hive 中创建数据库 mydb
;
create database if not exists mydb;
在 mydb
中创建 moviecleaned
表,将数据集movies.txt
导入 moviecleaned
表中。注意:数据集所在位置:/data/workspace/myshixun/data/movies.txt
,数据集文件字段之间以\t
分割。
create table if not exists moviecleaned(
movie_name string,
boxoffice string,
box_rate string,
sessions string,
show_count_rate string,
avg_number string,
attendance string,
total_boxoffice string,
movie_days string,
current_time string,
releaseDate string
) row format delimited fields terminated by '\t';
load data local inpath '/data/workspace/myshixun/data/movies.txt' into table moviecleaned;
在 hive 数据库 mydb
中,创建 top10_boxoffice
表 ,
create table if not exists mydb.top10_boxoffice(
movie_name string comment '电影名',
boxoffice double comment '票房'
) row format delimited fields terminated by '\t';
使用 Hive SQL 来统计 2020 年上映的电影中当前总票房最高的 10 部电影(当前总票房保留 1 位小数),并插入到top10_boxoffice
表。
insert into table top10_boxoffice
select movie_name, max(cast(total_boxoffice AS FLOAT)) m from moviecleaned
where substr(releaseDate,0,4) = "2020"
group by movie_name
order by m desc limit 10;
任务二
统计国庆假期中电影票房增长最多的三部电影及其每日的票房数据。
编程要求
在 hive 数据库 mydb
中,创建 boxoffice_national_day
表,
create table if not exists boxoffice_national_day(
movie_name string,
boxoffice float,
dates string
) row format delimited fields terminated by "\t";
使用 Hive SQL 来统计国庆假期中电影票房增长最多的三部电影及其每日的票房数据(2020 年国庆假期为 2020 年 10 月 1 日至 2020 年 10 月 7 日),并插入到boxoffice_national_day
表。
insert into table boxoffice_national_day
select m1.movie_name, m1.boxoffice, m1.current_time from moviecleaned m1
right join (
select movie_name mn,sum(boxoffice) s from moviecleaned
where datediff(current_time,"2020-10-01") >= 0 and
datediff(current_time,"2020-10-07") <= 0
group by movie_name
order by s desc
limit 3
) m2
on m1.movie_name=m2.mn
where datediff(m1.current_time,"2020-10-01") >= 0 and
datediff(m1.current_time,"2020-10-07") <= 0
order by m1.movie_name,day(m1.current_time);
任务三
统计 2020 年中当日综合总票房最多的 10 天及其当日综合总票房。
编程要求
在 hive 数据库 mydb
中,创建 day_max_boxoffice
表,
create table if not exists day_max_boxoffice(
dates string,
boxoffice float
) row format delimited fields terminated by "\t";
使用 Hive SQL 来统计统计 2020 年中当日综合总票房最多的 10 天(以当日综合票房为统计依据,票房数据保留 2 位小数),并插入到day_max_boxoffice
表。
insert into table day_max_boxoffice
select current_time,cast(sum(boxoffice) as decimal(10,2)) bf from moviecleaned
where substr(current_time,0,4)="2020" and releaseDate!="往期电影"
group by current_time
order by bf desc limit 10;
任务四
统计 2020 年首映的电影上映后 7 天的电影票房信息。
编程要求
在 hive 数据库 mydb
中,创建 movie_boxoffice
表,
create table if not exists movie_boxoffice(
movie_name string,
dates string,
boxoffice float
) row format delimited fields terminated by "\t";
使用 Hive SQL 来统计统计 2020 年首映的电影上映后 7 天的电影票房信息,并插入到movie_boxoffice
表。
insert into table movie_boxoffice
select m1.movie_name,m1.current_time,m1.boxoffice from moviecleaned m1 right join (
select movie_name,current_time from moviecleaned
where substr(current_time,0,4)="2020" and movie_days="上映首日"
) m2 on m1.movie_name=m2.movie_name
where m1.releaseDate!="往期电影" and datediff(m1.current_time,m2.current_time)<=7
order by m1.movie_name,m1.current_time;
任务五
统计 2020 年元旦节与国庆节放假后 7 天的观影人数。
编程要求
在 hive 数据库 mydb 中,创建 festival_boxoffice 表,
create table if not exists festival_boxoffice(
dates string,
festival string,
num bigint
) row format delimited fields terminated by "\t";
使用 Hive SQL 来统计 2020 年元旦节与国庆节放假后 7 天的观影人数(元旦假期为 2020 年 1 月 1 日到 2020 年 1 月 7 日,国庆假期为 2020 年 10 月 1 日到 2020 年 10 月 7 日,计算规则为:观影人数=排片场次∗场均人次
),并插入到festival_boxoffice
表。
insert into table festival_boxoffice
select substr(current_time,-2,2),case substr(current_time,-5,2) when '01' then "new_year_day" else "national_day" end,cast(sum(sessions*avg_number) as bigint) from moviecleaned
where datediff(current_time,"2020-01-01")>=0 and
datediff(current_time,"2020-01-07")<=0 or
datediff(current_time,"2020-10-01")>=0 and
datediff(current_time,"2020-10-07")<=0
group by current_time;