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;