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部分函数 -> 正文阅读

[大数据]hive部分函数

目录

1.行转列,列转行

? ? ? ? ?2.窗口函数

? ? ? ? ? ? ? ? ? ?window子句

? ? ? ? ? ? ? ? ? ?4种排名函数

3. window as with as?


1.行转列,列转行

行转列:

数据来源weight.txt

//建表语句
create table rowtest(
    name string,
    weight array<string>
)row format delimited 
fields terminated by '\t'
COLLECTION ITEMS terminated by ',';

//将数据插入到表中
 load data local inpath '/usr/local/module/weight.txt' into table rowtest;
//首先了解一下explode函数,传入的参数仅接受array和map类型,一次限制传入一个字段
//可以将里面的array,map里面的内容展开
hive> select explode(weight) from testarray2;
OK
150
170
180
150
180
190

lateral view 可以理解为类似表连接的操作?

hive> select name,col1 from rowtest lateral view explode(weight) t1 as col1;
OK
a	150
a	170
a	180
b	150
b	180
b	190

列转行

数据来自weight2.txt

?做法就是根据左边字段分组(group by),右边的数据通过concate连接起来

这也是通过mapreduce支持的

hive> select name,collect_list(col1) from linetest group by name;
OK
a	[150,170,180]
b	[150,180,190]

?collect_list(clo)不会对clo里面的内容去重

?使用collect_set(clo)会对clo里面的内容进行去重。

2.窗口函数

窗口函数是用来干什么的呢? 它主要是为了将表中原数据和聚合过后的信息同时展示出来

?window子句:

PRECEDING:往前
FOLLOWING:往后
CURRENT ROW:当前行
UNBOUNDED:起点,UNBOUNDED PRECEDING 表示从前面的起点,
UNBOUNDED FOLLOWING:表示到后面的终点
Hive 提供了两种定义窗口帧的形式:`ROWS` 和 `RANGE`。
两种类型都需要配置上界和下界。
例如,`ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW` 表示选择分区起始记录到当前记录的所有行;
`SUM(close) RANGE BETWEEN 100 PRECEDING AND 200 FOLLOWING` 则通过 *字段差值* 来进行选择。
如当前行的 `close` 字段值是 `200`,那么这个窗口帧的定义就会选择分区中 `close` 字段值落在 `100` 至 `400` 区间的记录。
如果没有定义窗口帧,则默认为 `RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW`。 

rows是指定了行数为多少
range是根据值得范围划分,不能确定到底是多少行数据
 

?现在来看一下用法:

//以下内容都是通过班级分区,成绩排序
select *,
row_number() over (partition by clazz order by score desc) as num1,
rank()       over (partition by clazz order by score desc) as num2,
//求当前当前行和上一行的平均值
avg(score)  over (partition by clazz order by score desc rows between 1 PRECEDING and 1 FOLLOWING) as  avg1,
//求当前当前行和前两行的最大值
max(score)  over (partition by clazz order by score desc rows between  2 PRECEDING and CURRENT ROW) as max1,
//求当前行和上下两行(一共5行)的平均值
avg(score)   over (partition by clazz order by score desc range between 2 PRECEDING and 2 FOLLOWING) as  avg2
from testwos

4种排名函数:

?row_number 排名从1到最后一位,没有重复也没有跳过

1 2 3 4 5 6 7 8 9 10

?rank 排名有重复,? 中间有跳过,排名从1到最后不完整

1 2 2 4 5 6 6 6 9 10

dense_rank 排名有重复,中间没有跳过,?排名从1到最后完整

1 2 2 3 4 5 6 6 6 7

?percent_rank:(rank的结果-1)/(分区内数据的个数-1)? 最大的就是0 ,结尾不一定是1

0.000 0.121 0.121 0.301 0.301 0.430 0.430 0.430 0.739  0.739

用法,需要结合窗口函数

?这里就写个row_number,其他的只要在下面语句中替换row_number就可以使用了

对学生表操作, 求男女生年龄排名

hive> select *,row_number() over(partition by gender order by age desc)from students_dt;

数据非常长,截取了部分观察?

?

截取百分比的部分运行结果??

3. window as with as?

当一个窗口函数得over() 内容需要多次使用可以考虑将他存储起来,方便多次使用

//未使用window as
select *,
row_number() over (partition by clazz order by score desc) as num1,
rank()       over (partition by clazz order by score desc) as num2,
from testwos;

//使用window as
select *,
row_number() over w as num1,
rank()       over w as num2,
from testwos
Window w as (partition by clazz order by score desc);

?普通的临时表?,也可以将他变成一个变量方便我多次使用

//使用with as
with stu as (select students.*,score.score from students left join score on students.id=score.id)
with s1 as ((select id,sum(score) as score from stu group by id))
select * from s1
left join stu 
on s1.id=stu.id;

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-11-27 09:57:56  更:2021-11-27 09:59:09 
 
开发: 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/24 7:48:57-

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