hive-2

  • 基本概念
  • 两种工具
  • CLI
  • Beeline
  • 基本命令
  • DDL操作指令


基本概念

什么是Hive?

  • 将结构化的数据文件映射为数据库表
  • 提供类SQL的查询语言HQL(Hive Query Language)操作Mapreduce
  • 适用于离线的数据分析

数据仓库和传统数据库的区别

区别项

数据仓库

数据库

查询语言

HQL

SQL

数据存储位置

HDFS

Raw Device/LocalFS

数据格式

用户定义

系统定义

数据更新

不支持

支持

索引



执行方式

Mapreduce

Executor

执行延迟



可拓展性



数据规模



可以看出,数据仓库Hive和传统数据库Mysql除查询语言类似外,其余各方面几乎都不相同

两种工具

Hive有两种操作界面

CLI

进入方式很简单,执行hive命令进入后默认模式
由于该模式命令与mysql基本一致,常用该模式操作Hive

Beeline

需要先开启hiveserver2服务,执行命令hiveserver2 start 新开窗口,执行命令beeline -u jdbc:hive2://IP地址:10000,进入beeline模式

输入show databases; 可以看到正确输出了结果

hive管理网页 hive页面_大数据

基本命令

执行hive命令进入命令行模式时,可以附带选项:

  • -e:再附带一条HQL指令,可以直接执行这条命令,适用于批量操作使用;
  • -f:再附带一个文件路径,可以依次执行指定文件中的所有HQL指令

DDL操作指令

操作数据库

# 显示全部数据库
show databases;
# 创建数据库
create database db_name;
# 创建数据库时指定信息
create database db_name with dbproperties('owner'='myhive','date'='20210321');
# 显示数据库信息
describe database extended db_name;
# 修改数据库信息
alter database db_name set dbproperties ('owner'='newhive');
# 删除数据库,与mysql不同的是,数据库下有表时删除会报错,要先清空数据库
drop database db_name;

操作表格
完整建表语句

create [external] table [if not exists] table_name (
col_name data_type [comment '字段描述信息']
col_name data_type [comment '字段描述信息'])
[comment '表的描述信息']
[partitioned by (col_name data_type,...)]
[claustered by (col_name,col_name,...)]
[sorted by (col_name [asc|desc],...) into num_buckets buckets]
[row format row_format]
[storted as ...]
[location '指定表的路径']

说明:

  1. external:标注了就是创建外部表,否则是内部表
  2. comment:表示注释,默认不可以使用中文(乱码)
  3. partitioned by:表示分区,这里的分区是目录,和mapreduce的分区不同
  4. clustered by :对每个一表分文件,Hive可以进一步组织成桶,也就是说桶式更细粒度的数据范围划分。Hive也是针对某一列进行桶的组织
  5. sorted by:排序
  6. storted as :指定表格的存储格式。常用格式:SEQUENCEFILETEXTFILE,RCFILE
  7. row format:指定表文件字段分隔符
  8. location:指定表文件的存储路径
# 根据已有表格结构创建新表格
create table newTab_name like oldTab_name;
# 查询表格详细信息,有formatted关键字信息更详细
desc [formatted] student;
# 向表格中加载数据,该命令默认追加数据
load data local inpath 'file_path' into table tab_name;
# 加载数据,并覆盖
load data local inpath 'file_path' overwrite into table tab_name;
# 从hdfs文件系统加载数据,这个操作是剪切操作,hdfs原本的文件会被移动到hive文件目录中
load data inpath 'hdfs_path' into table tab_name;
# 删除表格
drop table tab_name;

内部表和外部表区别

内部表

外部表

未被external修饰

被external修饰

由HIVE自身管理

由外部HDFS管理

存储在指定的warehouse中

存储位置用户自定

删除时会同时删除元数据和表数据

删除时仅删除HIVE中该表的元数据

修改数据会同时修改源数据

需要修改【MSCK REPAIR TABLE table_name】