IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> hive sql场景题第一部分详解 -> 正文阅读

[大数据]hive sql场景题第一部分详解

备注:场景题是50道挑战题的提升,每日挑战五题

第一题:

了解哪些窗口函数,都是什么功能?找一个在某个业务中的应用? 手写窗口函数及功能意义,同时随便写一个带窗口函数的sql,并说明其sql的含义。

窗口函数:通常格式为 可用函数+over()函数
# 查询所有明细
select * from t_order;
# 查询总量
select count(*) from t_order;
# 等价于
select *,count(*) over() from t_order;

2、求出每个栏目的被观看次数及累计观看时长?

数据: video表

uid channel min 
1 1 23
2 1 12
3 1 12
4 1 32
5 1 342
6 2 13
7 2 34
8 2 13
9 2 134
create table video( 
uid int, 
channel string, 
min int 
)
row format delimited 
fields terminated by ' ' 
;
load data local inpath './hivedata/video.txt' into table video;

答案:

问题:求出每个栏目的被观看次数及累计观看时长?
分析:
channel:频道
sum(min):观看时长
通过channel进行分组 group by channel= 每个栏目
观看次数:count(*)
?
select channel,count(*) countnum,sum(min) total from video group by channel;
?
result:
1 ? ? ? 5 ? ? ? 421
2 ? ? ? 4 ? ? ? 194
channel 1 ? ? ? NULL

3、编写sql实现

数据:

userid,month,visits 
A,2015-01,5
A,2015-01,15
B,2015-01,5
A,2015-01,8
B,2015-01,25
A,2015-01,5
A,2015-02,4
A,2015-02,6
B,2015-02,10
B,2015-02,5
A,2015-03,16
A,2015-03,22
B,2015-03,23
B,2015-03,10
B,2015-03,1
drop table visits;
create table visits(
userid string, 
month string, 
visits int 
)
row format delimited 
fields terminated by ',' 
;
load data local inpath './hivedata/visits.txt' overwrite into table visits; 

完成需求:每个用户截止到每月为止的最大单月访问次数和累计到该月的总访问次数,结果数据格式如下:

+---------+----------+---------+-------------+---------------+--+
| userid  |  month ? | visits  | max_visits  | total_visits  |
+---------+----------+---------+-------------+---------------+--+
| A ? ? ? | 2015-01  | 33 ? ?  | 33 ? ? ? ?  | 33 ? ? ? ? ?  |
| A ? ? ? | 2015-02  | 10 ? ?  | 33 ? ? ? ?  | 43 ? ? ? ? ?  |
| A ? ? ? | 2015-03  | 38 ? ?  | 38 ? ? ? ?  | 81 ? ? ? ? ?  |
| B ? ? ? | 2015-01  | 30 ? ?  | 30 ? ? ? ?  | 30 ? ? ? ? ?  |
| B ? ? ? | 2015-02  | 15 ? ?  | 30 ? ? ? ?  | 45 ? ? ? ? ?  |
| B ? ? ? | 2015-03  | 34 ? ?  | 34 ? ? ? ?  | 79 ? ? ? ? ?  |
+---------+----------+---------+-------------+---------------+--+
完成需求:每个用户截止到每月为止的最大单月访问次数和累计到该月的总访问次数,结果数据格式如下:
分析:
select userid,month,
visits,
max(visits) over(distribute by userid sort by month) max_visits,
sum(visits) over(distribute by userid sort by month) total_visits 
from (
select userid,month,
sum(visits) visits 
from visits 
group by userid,month
)t;
?
result:
A ? ? ? 2015-01 33 ? ? ?33 ? ? ?33
A ? ? ? 2015-02 10 ? ? ?33 ? ? ?43
A ? ? ? 2015-03 38 ? ? ?38 ? ? ?81
B ? ? ? 2015-01 30 ? ? ?30 ? ? ?30
B ? ? ? 2015-02 15 ? ? ?30 ? ? ?45
B ? ? ? 2015-03 34 ? ? ?34 ? ? ?79

4、编写连续7天登录的总人数:

数据: t1表

aa
drop table login;
create table login( 
Uid int, 
dt string, 
login_status int 
)
row format delimited 
fields terminated by ' ' 
;
?
load data local inpath './hivedata/login.txt' into table login; 
问什么?
编写求连续七天登录的总人数?
分析:
总人数是count进行统计
连续七天登录就是登入天数>=7 且登入状态为1
?
select count(*)
from
(
select distinct uid 
from(
select uid,dt,lag(dt,6) over(partition by uid order by dt) pre_dt,
sum(login_status) over(partition by uid order by dt rows between 6 preceding and current row) total
from login
) t 
where date_sub(dt,6)=pre_dt and t.total=7) t1;

5、你知道的排名函数有哪些?说一说它们之间的区别? 文字说明即可

row_number():从1开始,按照顺序,生成分组内记录的序列,不会存在重复,当排序的值相同是,按照表中记录的顺序进行排列
-- 有序随机不重复
dense_rank():生成数据项在分组中的排名,排名相等会在名次中不会留下空位
-- 有序重复
rank(): 生成数据项在分组中的排名,排名相等会在名次中留下空位 
-- 无序重复跳转
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-29 10:21:27  更:2021-09-29 10:22:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 19:26:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码