06 Hive QL的基础功能

Hive QL是Hive支持的类似SQL的查询语言。Hive QL大体可以分成DDLDML、UDF共3种类型。

  • DDL ( Data Definition Language)可以创建数据库(`createdatabase) 、创建表(create table),进行数据库和表的删除;
  • DML ( DataManipulation Language)可以进行数据的添加、查询;
  • UDF ( User DefinedFunction)还支持用户自定义查询函数。

一、操作数据库

  • 创建数据库
    1. create dababase qiu;
  • 显示数据库
    1. describe database qiu;
    2. -- 或者
    3. desc database qiu;


06 Hive QL的基础功能 - 图1

  • 打开数据库
    1. use qiu;
  • 删除数据库
    1. drop database qiu;

二、创建表

CREATE TABLE创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用IF NOT EXIST选项来忽略这个异常。

/usr/local/hive/examples/files路径下,有很多实例数据表,创建表可以使用其中的数据

06 Hive QL的基础功能 - 图2

  • 创建empdept两张表
    1. -- 创建表emp,以“|”分割字段
    2. create table emp (ename string, deptid int, degree int) row format delimited fields terminated by '|';
    3. -- 导入本地文件数据到emp表中
    4. load data local inpath '/usr/local/hive/examples/files/emp.txt' into table emp;
    5. -- 创建表dept,以“|”分割字段
    6. create table dept (deptid int, dname string) row format delimited fields terminated by '|';
    7. -- 导入本地文件数据到dept表中
    8. load data local inpath '/usr/local/hive/examples/files/emp.txt' into table dept;
  • 查看表命令
    1. show tables;
    2. show tables in qiu;
    3. show tables '*e*';


Hive在HDFS上创建了hdfs://hadoop0:9000/user/hive/warehouse/qiu.db目录,用于存放数据文件
可以使用hadoop fs命令进行查看
06 Hive QL的基础功能 - 图3
Hive在hdfs://hadoop0:9000/user/hive/warehouse/qiu.db目录中又创建了deptemp两个子目录,并且将dept.txt数据文件上传到了hdfs://hadoop0:9000/user/hive/warehouse/qiu.db/dept目录中,将emp.txt数据文件上传到了hdfs://hadoop0:9000/user/hive/warehouse/qiu.db/emp目录中。

三、数据准备

  • 加载数据,local字段表示是本机目录;

  • 如果不加,则表示是HDFS上的目录;

    1. load data local inpath '/usr/local/hive/examples/files/dept.txt' into table dept;
    2. load data local inpath '/usr/local/hive/examples/files/dept.txt' into table dept;


连续执行两次加载数据操作,结果用查询语句查看结果

  1. select * from dept;


06 Hive QL的基础功能 - 图4

  • overwrite关键字表示删除目标目录,当没有时则保留,但会覆盖同名旧目录。
    1. load data local inpath '/usr/local/hive/examples/files/dept.txt' overwrite into table dept;


06 Hive QL的基础功能 - 图5

  • 创建一个与dept结构一样的表dept2
    1. create table dept2 (deptid int, dname string) row format delimited fields terminated by '|';
    2. -- dept的数据导入dept2
    3. insert into dept2 select * from dept;
    4. -- 查看dept2的数据
    5. select * from dept2;
    6. -- 再次将dept的数据导入dept2
    7. insert into dept2 select * from dept;
    8. -- 查看dept2的数据(数据重复)
    9. select * from dept2;
    10. -- 使用overwrite导入
    11. insert overwrite table dept2 select * from dept;
    12. -- 查看dept2的数据(重复数据已删除)
    13. select * from dept2;
    14. -- 创建表的时候同时加载数据
    15. create table dept3 as select * from dept;
    16. -- 导出数据到指定路径
    17. insert overwrite local directory '/root/dept' select * from dept;
  1. # 另开一个命令行,查看在目录/root/dept下生成的000000_0文件内容
  2. cat /root/dept/000000_0


06 Hive QL的基础功能 - 图6

  • 查询emp表员工的全部数据,导入的原始数据中存在大量重复,先备份原始数据后修改原始数据
    1. cp /usr/local/hive/examples/files/emp.txt /usr/local/hive/examples/files/emp_bak.txt
    2. vim /usr/local/hive/examples/files/emp.txt
    3. # 只保留前6行
    4. cat /usr/local/hive/examples/files/emp.txt


06 Hive QL的基础功能 - 图7

  • 使用overwrite对emp数据重写载入
    1. load data local inpath '/usr/local/hive/examples/files/emp.txt' overwrite into table emp;
    2. select * from emp;