`

hive学习使用

    博客分类:
  • hive
阅读更多
HQL数据查询
数据查询是hive最主要的功能
查询语法

select..from语句

基本和mysql的操作差不多

select col1,col2 from table;
select col1 c1,col2 c2 from table;

select l.name,r.cousrse from (select id,name from student) l join (select id,course from student_info) r on l.id=r.id;

select * from student limit 100;


如果需要在select语句中根据某列的值进行相应的处理,hive支持在select语句中使用
case...when...then 
select id,enname,sex,
case
when sex='M' then '男' 
when sex='M' then '男' 
else '无性'
end
from student;



where 语句

对查询条件进行限制,就需要使用where语句,

select * from student where age=18;


//也可使用or和and 连接过多个谓词表达式//
select * from student where age=18 and sex='F';


其他的谓词使用都和mysql的使用差不多。

### group by语句和having语句
group by 通常会和聚合函数一起使用,先按照一个列或多个列对结果进行分组再执行聚合,

select couint(*) from student group by age;
select avg(age) from student group by c_id;  //这里查询的字段没有出现在group by后边就必须使用avg()这些聚合函数//
//如果想对分组结果进行条件过滤,可以使用having子句//
select c_id,avg(age) from student where sex='F' group by c_id having avg(age)>18;



join语句
hive支持一般的join语句,但目前只支持等值连接。

1.inner join

默认采用的方式
select t1.id,t2.id from student t1 join student_info t2 on t1.id=t2.id;


2. left/right outer join

左右外连接
select t1.id,t2.id from student t1 left outer join student_info t2 on t1.id=t2.id;


3. full outer join

全外表连接
select t1.id,t2.id from student t1 full outer join student_info t2 on t1.id=t2.id;


4. left-semi join
```
左半连接是hive特有的语法,会返回左表的记录,前提是记录对于游标满足on中的判定条件。左半连接被用来代替标准sql中in的操作,

select t1.id from student t1 left semi join student_info t2 on t1.id=t2.id;


找出student_info中存在的表1的记录,不能像使用标准的sql一样通过in来完成

select t1.id from student t1 where t1.id in (select t2.id from student_info t2);//错误的语法//


这样可以使用内连接得到同样的结果,hive在有表中找到了匹配的记录,hive就会停止扫描。
```
5. map-side join

通过Mapreduce实现了join操作。不难发现,求笛卡尔积的操作时时在Reduce端完成的,这种连接

select t1.id t2.id from student t1 join student_info t2 on t1.id=t2.id;


6. 多表join

hive可以支持对多表进行join,如下:

select * from student t1 join student_info t2 on t1.id=t2.id join student_class t3 on t1.id=t3.id;
	

hive会为每一个join操作启动一个作业,第一个作业完成表1和表2的连接操作,第二个作业完成第一个作业的输出和表3的连接操作,以此类推。这个应该是在多次Mapreduce中是非常有用的。


### ORDER BY和SORTBY语句
hive中的ORDER BY和sql中的order by的语义是一样的,执行全局的排序,这就必须有一个Reduce来完成,否则无法达到全局排序的要求。

select * from student order by c_id desc,age asc;   //在排序时候还可以用desc和asc关键字指定排序方式//


hive还有一种排序方式,这种排序防护只会在Reducer中进行一个局部排序,也就是sortby

select * from student sort by c_id desc,age asc;


order by和sort by在hive中排序结构方式结构完全一样,当Reducer的个数只有一个时,两种结果完全相同,当Reducer的个数不止一个时,sort by的输出就可能会有重合,如表student中的id列为:
1,7,3,9,2,12
其中order by id 的结果为:

1
2
3
7
9
12


Reducer的数目为2时候,sort by id的结果为

1
7
12
2
3
9


其中前3行数据由第一个Reducer输出,后3行数据由第二个Reducer输出。

DISTRIBUTE BY语句
hive可以通过distribute by控制map的输出在reducer中是如何划分的,也就是等同于Mapreducer中的Partitioner,通过分区可以使得数据进入同一个Reducer,我们操作一下

select col1,col2 from student distribute by col1 sort by col1,col2; //distribute by保证了col1相同的数据一定进入同一个Reducer,在Reducer中再按照col1,col2的顺序达到要求,这样就和上边只有一个reducer达到的效果是一样的//


```
CLUSTER BY
这个只是在 DISTRIBUTE BY和SORT BY中的列完全相同时候可以用cluster by替代

分桶和抽样
这个没有理清

UNION ALL
hive中对于unonall的使用时非常常见的,主要用于多表合并的场景,union all要求各表select出的字段类型必须完全匹配。hive是不支持union all的,所有必须进行嵌套查询

select s.id,s.age
from(select si.cid,si.age from student_info si union all select si1.cid,si1.age from student_info si1) s;



hive函数
hive内置函数很多,在数据查询中有时候会常常用到,可以通过以下命令查看

show functions;


标准函数
聚合函数
表生成函数
UDF自定义函数

分享到:
评论

相关推荐

    Hive学习必备——配置Hive环境教程 免费分享哦~

    Hive学习必备——配置Hive环境教程 在这篇文章中,我们将详细介绍如何配置Hive环境,包括安装Hive、配置Hadoop环境、配置Hive Metastore数据库等步骤。同时,我们还将使用Xshell6工具来远程连接到Hive服务器,并...

    基于Hadoop的数据仓库Hive学习指南.doc

    【标题】:“基于Hadoop的数据仓库Hive学习指南” 【描述】:该文档是一份针对Hive的学习资料,旨在引导读者理解如何在Hadoop平台上利用Hive进行数据仓库操作和编程实践。它涵盖了Hive的基本概念、安装步骤、实验...

    Hive学习总结及应用.pdf

    Hive学习总结及应用.pdf 本文档主要介绍了Hive的基本概念、应用场景、元数据存储方式、数据导入和导出方式等。下面是对文档中提到的知识点的详细解释: 一、Hive概述 Hive是一个构建在HDFS和Map/Reduce之上的可...

    hive学习资料大全 实战优化资源

    hive被大多数企业使用,学习它,利于自己掌握企业所使用的技术,这里从安装使用到概念、原理及如何使用遇到的问题,来讲解hive,希望对大家有所帮助。 此篇内容较多: 看完之后需要达到的目标 1.hive是什么 2.明白...

    王家林hive学习资料

    《王家林Hive学习资料》是一份详尽的教程,旨在帮助学员深入了解和掌握Hive这一数据仓库工具。Hive在企业Hadoop应用中扮演着核心角色,尤其在大规模离线数据分析方面表现卓越,被Facebook、淘宝等大型公司广泛采用。...

    hive学习总结 思维导图.xmind

    由于 Hive 采用了类似SQL 的查询语言 HQL(Hive Query Language),因此很容易将 Hive 理解为数据库。其实从结构上来看,Hive 和数据库除了拥有类似的查询语言,再无类似之处。本文将从多个方面来阐述 Hive ...

    hive学习笔记-比较全的知识

    标题中提到的"Hive学习笔记-比较全的知识"和描述中所述"相当不错的,适合初学者,下载绝对不亏"意味着本篇文档旨在为初学者提供一个全面的学习指南,覆盖Hive的主要概念和操作。而标签"hive"确定了文档的中心主题是...

    hive的学习资料

    5. 使用 Hive 注意事项 涵盖字符集、压缩、COUNT(DISTINCT)、JOIN、DML 操作、HAVING、子查询、JOIN 中的 NULL 处理、分号字符等。 6. 优化 包括 Hadoop 计算框架的特性、常用优化手段、全排序、笛卡尔积、EXIST ...

    hive学习笔记

    hive hadoo MapReduce 介绍Hive。Hive入门,Hive学习笔记

    Hive学习资料书籍压缩文件

    hive学习资料-hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速...

    Hive新手学习资料之Hive入门与实战.+Hive用户手册+hive函数大全中文版资源合集

    Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive十分适合对数据仓库进行统计分析。 目录: Hive入门与实战.pdf hive函数...

    Hive学习笔记(更新版)

    ### Hive学习笔记(更新版) #### 一、Hive简介 Hive 是一款构建于 Hadoop 之上的数据仓库工具,旨在提供一种简单易用的方法处理存储在 Hadoop 文件系统 (HDFS) 中的大量数据集。它允许用户使用类似于 SQL 的语言...

    hive搭建及使用入门简介(内含PPT、各种表创建sql及hive搭建使用笔记)

    “Hive搭建使用笔记”可能包含了实践过程中的注意事项、常见问题及其解决方案,是学习过程中宝贵的参考资料。 通过这个压缩包,你可以全面掌握Hive的基础知识,包括安装、配置、表管理和SQL操作。实践是学习最好的...

    深入浅出学习HIVE.pdf

    Hive之所以被广泛使用,是因为它提供快速开发的能力,操作接口采用类SQL语法,避免了去写MapReduce,减少开发人员的学习成本。Hive与Hadoop有密切的关系,Hive是建立在Hadoop之上的,其架构与Hadoop非常类似。Hive的...

    hive学习必备经典(百度)

    Hive学习必备经典 Hive是一种基于Hadoop的数据仓库工具,用于数据分析和报表生成。下面是对Hive的结构、架构、基本操作和数据存储的详细介绍。 Hive结构 Hive的结构主要包括三个部分:元数据库(Metastore)、...

    Hive 学习笔记1

    Hive 学习笔记Hive

    Hive学习笔记

    Hive 是一种基于 Hadoop 的数据仓库工具,它允许用户使用 SQL 类似的查询语言(HiveQL)来处理和分析存储在 Hadoop 分布式文件系统(HDFS)中的大规模数据集。...学习 Hive 需要结合实际场景和大量实践来加深理解。

Global site tag (gtag.js) - Google Analytics