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;