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;