hive 高级查询

hadoop hive 高级查询

Hive聚合运算 - Group by

(基本内置聚合函数)nmax, min, count, sum, avg

1)Hive基本内置聚合函数与group by 一起使用

2)支持按位置编号分组

set hive.groupby.orderby.position.alias=true;

select name,sum(score) from table_name group by name;——>使用表达式

Hive聚合运算-hiving

1)对group by聚合结果的条件过滤

2)可以避免在Group by 之后使用子查询(where )

select name from table_name group by name having count(*)<1——>having使用

select name from table_name group by name where count(*)<1——>where使用

产生的问题:having 和 where有什么不同?

having是先分组在进行筛选

where是可以先帅选在进行分组

Hive聚合运算-基础聚合

1)与group by 一起使用,应用于列或者表达式

max 寻找最大的一个数
min 寻找最小的一个数
count 整个列的个数
sum 统计总数
avg 计算某个列的平均数
collect_set 将某个列数据形成数组(可以去重)
collect_list 将某个列数据形成数组(不可以去重)

Hive聚合运算-高级聚合

1)grouping sets:

SELECT a, b, SUM( c ) FROM tab1

GROUP BY a, b

GROUPING SETS ( (a, b), a, b, ( ) )(相当于将a,b出现的所有情况都显示出来)

2)GROUP BY WITH CUBE|ROLLUP

? CUBE:对分组列进行所有可能组合的聚合

? ROLLUP:计算维度层次级别上的聚合

SELECT a, b, SUM( c ) FROM tab1 

GROUP BY a, b, c WITH CUBE
//相当于将(a,b,c),(null,b,c)(a,null,c),(null,bull,c)出现的所有情况都显示出来
SELECT
a, b, SUM( c )
FROM tab1
GROUP BY a, b, c WITH ROLLUP
//相当于将(a,b,c),(a,null,c),(null,null,c)
出现的所有情况都显示出来

窗口函数-概述

语法:

Function (arg1,..., arg n) OVER (PARTITION BY <...> [<window_clause>])

over关键字 指出我们作用在什么范围

通过更细节的的window clause把窗口函数更细节的映射

窗口函数-排序

row_number() over

实例一:

1)row_number()

将一个分好组里面的一个分区的所有数据进行排序;

select userid,username,dept,score,
row_number() over(partition by username order by score)
from ccc;

2)rank()

对于相同的分区里面的数据显示一样的排名

select userid,username,dept,score,
rank() over(partition by username order by score)
from ccc;

3)dense_rank()

相当于在分区里面有排名一样的,接下来的排序接着排

select userid,username,dept,score,
dense_rank() over(partition by username order by score)
from ccc;

4)percent_rank()

select userid,username,dept,score,
percent_rank() over(partition by username order by score)
from ccc;(得出的数值比列)

计算方式:当前(行号-1)除以(总行数-1)

窗口函数-聚合

sum: 分组以后在按照总成绩进行排序
min() 分组以后在按照最小成绩进行排序
avg() 分组以后在按照平均成绩进行排序
count 分组以后在按照个数成绩进行排序

实例:

select userid,username,dept,score,
sum(score) over(partition by dept order by score)
from userinfos group by dept;

窗口函数-分析

lead(score,1) 根据给出数,生成从后面开始数第几个数的值
lag(score,1) 根据给出数,生成从前开始数第几个数的值
first_value(salary) 根据给出的列值,都将生成第一个数值
last_value(salary) 根据给出的列值,都将生成最后一个数值

实例:

select username,dept,score,
first_value(score) over(partition by username order by score)
from ccc;

窗口函数-窗口定义-2

2 preceding 前两行
current row 当前行
2 following 最后两行
unbounded 无限

作用:用于进一步细分结果并应用分析函数

支持两类窗口定义

1)行类型窗口

2)范围类型窗口

当前指针的所在行,

select username,dept,score,
max(score)over(partition by dept order by username rows
between 1 preceding and current row)//设定当前行和当前前一行的数据做对比,取最大的
from userinfos;
取得是分区里面的最大的数

范围类型窗口实例:

select username,dept,score,
max(score)over(partition by dept order by username rows
between 1000 preceding and current row)//设定当前行和当前前一行的数据做对比,取最大的
from userinfos;
取得是分区里面的最大的数

Hive UDf

当数据为map list 继承UDF /数据为string 继承GennericUDF

实例一:

首先我们打开idea

导入如下架包

<dependency>
  <groupId>org.apache.hive</groupId>
  <artifactId>hive-common</artifactId>
  <version>2.3.5</version>
</dependency>
<dependency>
  <groupId>org.apache.hive</groupId>
  <artifactId>hive-exec</artifactId>
  <version>2.3.5</version>
</dependency>

新建一个类并继承UDF

编写一个方法打包并储存到hdfs

执行下面语句,即可使用自定义函数

create function hello as ‘com.njbd.tools.SayHello‘ using jar ‘hdfs:///myfun/fcu.jar‘;

原文地址:https://www.cnblogs.com/tudousiya/p/11235171.html

时间: 2024-10-11 14:46:08

hive 高级查询的相关文章

hive 高级查询1

hadoop hive 高级查询 select基础 1.0 一般查询 1)select * from table_name 2)select * from table_name where name='....' limit 1; 1.1cte和嵌套查询 1)with t as(select....) select * from t; 2)select * from(select....) a;(a一定要添加) 1.2列匹配正则表达式 在添加数据前:SET hive.support.quoted

Hive高级查询(group by、 order by、 join等)

查询操作 group by. order by. join . distribute by. sort by. clusrer by. union all 底层的实现 mapreduce 常见的聚合操作 count计数 count(*) 所有值不全为NULL时,加1操作 count(1) 不管有没有值,只要有这条记录,值就加1 count(col) col列里面的值为null,值不会加1,这个列里面的值不为NULL,才加1 sum求和 sum(可转成数字的值) 返回bigint avg求平均值

07-Hive高级查询order by、group by

声明:未经本人允许,不得转载哦! 哈喽,大家好.这两天就要高考了,我原本是一名物理老师,这一届初高中的学生带完,估计就要开始找大数据岗位的工作了.目前掌握的是技能有java+linux++mysql+hadoop+hive+hbase,正在学习的是shell,计划2016年接着要学习的是scala+spark.祝我好运吧. 今天我们一起来学习的是[Hive高级查询group.order语法].话不多说,咱们开始吧. 1 Hive的高级查询操作有很多,主要有: group by #按K来把数据进行

hive高级操作(优化,数据倾斜优化)

2019/2/21 星期四 hive高级操作(优化,数据倾斜优化) 分区表/桶表应用,skew,map-join //见hive的基本语法行列转换 hive 优化hive 优化思想Explain 的使用经典案例(distinct count) 数据倾斜的原因操作:关键词 情形 后果1.Join 其中一个表较小,但是key 集中分发到某一个或几个Reduce 上的数据远高于平均值 :2.大表与大表,但是分桶的判断字段0 值或空值过多这些空值都由一个reduce 处理,非常慢:3.group by

大数据技术之_08_Hive学习_04_压缩和存储(Hive高级)+ 企业级调优(Hive优化)

第8章 压缩和存储(Hive高级)8.1 Hadoop源码编译支持Snappy压缩8.1.1 资源准备8.1.2 jar包安装8.1.3 编译源码8.2 Hadoop压缩配置8.2.1 MR支持的压缩编码8.2.2 压缩参数配置8.3 开启Map输出阶段压缩8.4 开启Reduce输出阶段压缩8.5 文件存储格式8.5.1 列式存储和行式存储8.5.2 TextFile格式8.5.3 Orc格式8.5.4 Parquet格式8.5.5 主流文件存储格式对比实验8.6 存储和压缩结合8.6.1 修

数据库——基础(数据库操作,表格操作)——增加高级查询

笔记 LAMP:Linx(操作系统) A(阿帕奇)——网页的应用程序 M(Mysql):体积小,应用简单 P(PHP) 第一步:搭建网页环境——A\M\P WAMP:用WAMP搭建环境 DW:更好的显示 数据库的基本操作: 数据库——表结构——字段(列) 每一行数据成为一条数据(记录) 特点:关系型数据库,有严格的规范 1.必须有主键:能够唯一标识一条数据的字段 2 T-SQL:通用的数据库操作语句 自增长列code(主键列) ;连接键表 最后一个字段不加 ,#注释 创建表:create tab

MYSQL中的多类型查询及高级查询操作

离散查询select * from car where price=30 or price=40 or price=50 or price=60;select * from car where price in(30,40,50,60)取出数据select * from car where price not in(30,40,50,60)去掉数据 聚合函数(统计查询)select count(*) from carselect count(code) from car #取所有的数据条数sel

Linq高级查询与分页查询

Linq高级查询 以~开头: r=>r.Name.StartsWith("李"); 以~结尾: r=>r.Name.EndsWith("光"); 包含(模糊查询): r=>r.Name.Contains("四"); 数据总个数: Con.Goods.Count();||Con.Users.ToList().count; 最大值: Con.Goods.ToList().Max(r=>r.Price); 最小值: Con.Go

数据库的高级查询

高级查询 1.连接查询(对列的扩展) 第一种形式:select * from Info,Nation #会形成笛卡尔积select * from Info,Nation where Info.Nation = Nation.Code #加上筛选条件 select Info.Code,Info.Name,Sex,Nation.Name,Birthday from Info,Nation where Info.Nation = Nation.Code#查询指定列 select Info.Code a