Hive是Hadoop生态系统中必不可少的一个工具。它是建立在Hadoop体系结构上的。SQL抽象是主流数据离线处理工具。Hive中数据库的概念本质上仅仅是表的一个目录或者命名空间。
Hive架构
*Hive中附带的客户端有三种:CLI(命令行客户端)、HWI(网页客户端)和Thrift Server(编程客户端)
*在客户端输入的所有命令和查询都会进入到Driver(驱动模块)进行解析、编译、优化和执行。
Driver包含SQL Parser、Physical Plan、Query Optimizer和Execution四个模块。
Hive的安装SQL Parser是解析器,用于将SQL语句转换为抽象语法树。
Physical Plan是编译器,用于将抽象语法树编译生成逻辑计划。
Query Optimizer是优化器,用于对逻辑执行计划进行优化。
Execution是执行器,用于把逻辑执行计划转换为可执行的MapReduce程序。*
详细安装讲解:
https://blog.csdn.net/weixin_56948111/article/details/122014730
如何创建一个数据库:
CREATE DATAbase school;
避免抛出错误信息:
CREATE DATAbase IF NOT EXISTS school;
查看Hive中所包含的数据库:
SHOW DATAbaseS;
切换数据库:
USE school;
删除数据库:
DROp DATAbase IF EXISTS school CASCADE;
IF EXISTS子句是可选的,如果加了这个子句,就可以避免因数据库school不存在而抛出的警告信息。
CASCADE关键字可以使Hive自行先删除数据库中的表,再删除数据库。
分隔符
行分隔符 n
列分隔符 ^A
建表语句中STORED AS XXX子句用于设置文件类型。如果文件类型是TextFile,该子句可以省略。
建表语句中LINES TERMINATED BY ’ '子句用于指明行分隔符,如果行分隔符是n的话可以省略。
建表语句中用于指明列分隔符的子句都要放在ROW FORMAT DELIMITED这组关键字后。FIELDS TERMINATED BY ’ '这个子句用于指定列分隔符.
建表语句
CREATE TABLE IF NOT EXISTS teacher;
增加上IF NOT EXISTS选项,若表已经存在了,Hive就会忽略掉后边的执行语句,而且不会有任何提示。
装载数据
导入数据本质是一个剪切操作,默认导入的是hdfs数据,导入本地数据需要添加 local 关键字
默认导入是执行追加操作,如果需要执行覆盖操作,需要添加 overwrite 关键字
外部表,内部表 ,分区表
external 外部表的关键字,外部表不会在school.db,目录下创建子目录。
location 设置外部表数据文件的位置,外部表不需要导入数据。
外部表:共享数据,不创建目录,不操作目录,随着表的删除,只删除表结构,不删除数据文件。
内部表控制着数据的生命周期,当内部表删除的时候,目录和其中的文件也会删除
内部表:管理数据,创建目录,剪切文件,随着表的删除,表结构,目录和数据文件都删除
PARTITIonED BY子句用于设置分区字段,多个分区字段之间以逗号分隔。分区字段一旦创建就表现的和普通字段一样,可以应用于各种查询条件或结果。
查询语法
聚合函数
查询每个学院的学生年龄的总和,最大值,最小值,平均值
SELECT SUM(age),MAX(age),MIN(age),AVG(age) FROM student GROUP BY college;
SELECt SUM(age),MAX(age),MIN(age),AVG(age) FROM student GROUP BY clazz;
排序
order by,全局排序,只使用一个reduce.全局有序,但是比较慢
–默认升序(ASC),也可以指定降序(DESC)
查询所有学生信息并按照年龄升序排序
select * from studentwhere age>10order by age;
SORT BY 可以使用多个reduce,每个reduce 输出的数据有序,全局无序
select * from student sort by age;
子查询
子查询是指在一个完整的查询语句中,嵌套若干个不同功能的子查询,从而完成复杂查询的编写形式。



