Hive构建在Hadoop文件系统之上,Hive不提供实时的查询和基于行级的数据更新操作,不适合需要低延迟的应用,如联机事务处理(On-line Transaction Processing,OLTP)相关应用。
Hive作为数据仓库软件,使用类SQL的HiveQL语言实现数据查询,所有Hive数据均存储在Hadoop文件系统中,具有以下特性。
1)使用HiveQL以类SQL查询的方式轻松访问数据,将HiveQL查询转换为MapReduce的任务在Hadoop集群上执行,完成ETL(Extract、Transform、Load,提取、转换、加载)、报表、数据分析等数据仓库任务。HiveQL内置大量UDF(User Defined Function)来操作时间、字符串和其他的数据挖掘工具,支持用户扩展UDF函数来完成内置函数无法实现的操作。
2)多种文件格式的元数据服务,包括TextFile、SequenceFile、RCFile和ORCFile,其中TextFile为默认格式,创建SequenceFile、RCFile和ORCFile格式的表需要先将文件数据导入到TextFile格式的表中,然后再把TextFile表的数据导入SequenceFile、RCFile和ORCFile表中。
3)直接访问HDFS文件或其他数据存储系统(如HBase)中的文件。 ·
4)支持MapReduce、Tez、Spark等多种计算引擎,可根据不同的数据处理场景选择合适的计算引擎。
5)支持HPL/SQL程序语言,HPL/SQL是一种混合异构的语言,可以理解几乎任何现有的过程性SQL语言(如Oracle PL/SQL、Transact-SQL)的语法和语义,有助于将传统数据仓库的业务逻辑迁移到Hadoop上,是在Hadoop中实现ETL流程的有效方式。
6)可以通过HiveLLAP(Live Long and Process)、Apache YARN和Apache Slider(动态YARN应用,可按需动态调整分布式应用程序的资源)进行秒级的查询检索。LLAP结合了持久查询服务器和优化的内存缓存,使Hive能够立即启动查询,避免不必要的磁盘开销,提供较佳的查询检索效率。
1.启动hadoop
cd /apps/hadoop/sbin
./start-all.sh
2.启动MySQL
sudo service mysql start
3.启动hive
cd /apps/hive/bin
hive
3.创建数据库
create database if not exists 库名;
use 库;
4.创建表
--- 创建内部表
create table if not exists 表名(字段名 属性,字段名 属性,......);
-- 创建外部表
create external table if not exists 表名(字段名 属性,字段名 属性,......);
-- 创建表,可以读取以“,”分割的数据
create external table if not exists 表名(字段名 属性,字段名 属性,......)
row format delimited fields terminated by ',';
-- 创建分区表
create table if not exists 表名(字段名 属性,字段名 属性,......) partitioned by (分区字段 属性);
-- 创建表2,结构等同于表1
create table if not exists usr1 like usr;
5.创建视图
hive>create view 视图名 as select id,age from usr;
--- 创建视图,只包含usr表中id,age属性
6.删除操作
-- 删除数据库
drop databasehive;
drop database if not exists 库名;
-- 删除数据库及其中所有表
drop database if not exists 库名 cascade;
-- 删除表
drop table if exists 表名;
-- 删除表usr,如果是内部表,元数据和实际数据都会被删除;
-- 如果是外部表,只删除元数据,不删除实际数据
-- 删除视图
dropview if exists 视图名;
7.修改
-- 修改数据库
-- 为hive数据库设置dbproperties键值对属性值来描述数据库属性信息
alter database hive set dbproperties(‘edited-by’=’lily’);
-- 修改表 重命名
alter table 原名 rename to 新名;
-- 修改表 增加分区
alter table 表名 add if not exists partition(age=10);
-- 删除表中分区
alter table 表名 drop if exists partition(age=10);
-- 修改列名
alter table 表名 change 原名 新名 属性 after 位置;
-- 例:把表usr中列名name修改为username,并把该列置于age列后
alter table usr change name username string after age;
-- 增加列
alter table 表名 add columns(列名 属性);
-- 删除原有字段,指定新字段
alter table 表名
replace columns(新列名 属性,新列名 属性,.... );
-- 修改视图
alter view 视图名 set .... ;
8.查看
-- 查看数据库
show databases;
-- 查看指定条件数据库
show databases like ‘h.*’;
-- 查看表和视图
show tables;
-- 查看指定条件的表和视图
show tables in hive like ‘u.*’;
9.描述
-- 查看数据库基本信息
describe database 库名
-- 查看数据库详细信息
describe database extended 库名;
-- 查看表、视图的基本信息
describe 名;
-- 查看表、视图的详细信息
describe extended 名;
-- 查看某一列的信息
describe extended 库名.表名.列名;
10.信息的装载
-- 把本地目录下文件中的数据装载进表中,并覆盖原有数据
load data local inpath ‘/usr/local/data’ overwrite into table 表名;
-- 把本地目录下文件中的数据装载进表中,不覆盖原有数据
load data local inpath‘/usr/local/data’ into table 表名;
-- 把分布式文件系统目录下文件中的数据装载进表中,并覆盖原有数据
load data inpath ‘hdfs://master_srever/usr/local/data’ overwrite into table 表名
11.数据导入和导出
-- 插入其他表中的数据并覆盖原有数据
insert overwrite table usr1 select * from usr where age=10;;
-- 插入其他表中的数据,不覆盖原有数据
insert table usr1 select * from usr where age=10;;
-- 将表中数据导出到本地目录
insert overwrite local directory '/data/hive2/out' select * from cat_group;
-- 将表中数据导出到分布式文件系统目录
insert overwrite directory'/myhive2/out' select * from cat_group;
12.数据的查询(同MySQL)
-- select 查询
hive>select * from student;
hive>select * from student limit 1;
hive>select name from student;
hive>select t.name from student t;
-- join查询
hive>select t1.name,t2.coursename from student t1
>join course t2 on t1.stuid = t2.stuid;
hive>select t1.name,t2.coursename from student t1
>left join course t2 on t1.stuid = t2.stuid;
hive>select t1.name,t2.coursename from student t1
>right join course t2 on t1.stuid = t2.stuid;
hive>select t1.name,t2.coursename from student t1
>full join course t2 on t1.stuid = t2.stuid;
-- where子句
hive >select * from student where age = 21;
-- 嵌套查询
hive >select a.name, b.coursename
> from (select stuid, name from student) a
> join (select stuid, coursename from course) b on a.stuid = b.stuid;
-- order by 子句
hive >select * from student order by age desc;
hive >select * from student order by age;
-- groupby :分组,常与聚合函数同时使用
hive >select sex,avg(age) from student group by sex;
hive >select sex,avg(age) from student group by sex having avg(age) > 20;
hive的详细介绍和安装可参考:(超详细)大数据技术之Hive的实战_hive实战-CSDN博客