1.DDL
Hive Data Definition Language
create、delete、alter...
2.Hive数据抽象/结构
database HDFS一个目录
table HDFS一个目录
data 文件
partition 分区表 HDFS一个目录
data 文件
bucket 分桶 HDFS一个文件
3.创建数据库
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];
CREATE DATABASE IF NOT EXISTS hive; # IF NOT EXISTS:创建的时候数据存在就忽然不存在就创建
CREATE DATABASE IF NOT EXISTS hive2 LOCATION '/test/location'; # LOCATION:制定数据存HDFS路径
CREATE DATABASE IF NOT EXISTS hive3 WITH DBPROPERTIES('creator'='pk'); # WITH:自己定义定义一下信息
desc database extends hive; # 查看数据库详细信息
desc formatted hive # 查看数据库详细信息
set hive.cli.print.current.db=true; # 显示当前所在是库
USE hive # 进入数据库
!clear; # 清屏
/user/hive/warehouse是Hive默认的存储在HDFS上的路径
4.查看数据库
show databases; # 查看数据库
show databases like "hive*"; # 查看包含hive的数据库
5.删除数据库
drop database hive # 删除数据库 如果数据库中有表删除失败
drop database hive CASCADE # 删除数据库 如果有表 表也会跟着删除
6.创建表
CREATE TABLE emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'; # 创建表
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name -- (Note: TEMPORARY available in Hive 0.14.0 and later)
[(col_name data_type [COMMENT col_comment], ... [constraint_specification])]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[SKEWED BY (col_name, col_name, ...) -- (Note: Available in Hive 0.10.0 and later)]
ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)
[STORED AS DIRECTORIES]
[
[ROW FORMAT row_format]
[STORED AS file_format]
| STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)] -- (Note: Available in Hive 0.6.0 and later)
]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)] -- (Note: Available in Hive 0.6.0 and later)
[AS select_statement]; -- (Note: Available in Hive 0.5.0 and later; not supported for external tables)
LOAD DATA LOCAL INPATH '/home/hadoop/data/emp.txt' OVERWRITE INTO TABLE emp; # 导入数据
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)] # 数据导入到表中
LOCAL: 本地系统,如果没有local那么就是指的HDFS的路径
OVERWRITE: 是否数据覆盖,如果没有那么就是数据追加
7.修改表名称
alter table hive rename to hive1 # 把表名称hive改成hive1
8.导入导出数据
LOAD DATA LOCAL INPATH '/home/hadoop/data/emp.txt' OVERWRITE INTO TABLE emp; # 导入数据
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)] # 数据导入到表中
LOCAL: 本地系统,如果没有local那么就是指的HDFS的路径
OVERWRITE: 是否数据覆盖,如果没有那么就是数据追加
create table hive1 select * from hive # 创建hive1表把hive的数据导入到hive1中
INSERT OVERWRITE LOCAL DIRECTORY '/tmp/hive/' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' select empno,ename,sal,deptno from emp; # 把数据写入到本地tmp/hive/目录中
9.聚合: max/min/sum/avg
select max(deptno), min(deptno), sum(deptno), avg(deptno) from hive # 最大值 最小值 和 平均值
10.分组函数: group by
出现在select中的字段,如果没有出现在聚合函数里,那么一定要实现在group by里
select deptno, avg(sal) from emp group by deptno;
求每个部门、工作岗位的平均工资
select deptno,job avg(sal) from emp group by deptno,job;
对于分组函数过滤要使用having
select deptno, avg(sal) avg_sal from emp group by deptno having avg_sal>2000;
11.join: 多表
select e.empno,e.ename,e.sal,e.deptno,d.dname from emp e join dept d on e.deptno=d.deptno;
12.explain EXTENDED: 显示更加详细的信息
explain EXTENDED select e.empno,e.ename,e.sal,e.deptno,d.dname from emp e join dept d on e.deptno=d.deptno;