Hive定义了一套自己的SQL,简称HQL,它与关系型数据库的SQL略有不同,但支持了绝大多数的语句如DDL、DML以及常见的聚合函数、连接查询、条件查询。
DDL操作(数据定义语言)包括:Create、Alter、Show、Drop等。
(1)create database- 创建新数据库
(2)alter database - 修改数据库
(3)drop database - 删除数据库
(4)create table - 创建新表
(5)alter table - 变更(改变)数据库表
(6)drop table - 删除表
(7)create index - 创建索引(搜索键)
(8)drop index - 删除索引
(9)show table - 查看表
DML操作(数据操作语言)包括:Load 、Insert、Update、Delete、Merge。
(1)load data - 加载数据
①insert into - 插入数据
②insert overwrite - 覆盖数据(insert … values从Hive 0.14开始可用。)
(2)update table - 更新表(update在Hive 0.14开始可用,并且只能在支持ACID的表上执行)
(3)delete from table where id = 1; - 删除表中ID等于1的数据(delete在Hive 0.14开始可用,并且只能在支持ACID的表上执行)
(4)merge - 合并(MERGE在Hive 2.2开始可用,并且只能在支持ACID的表上执行)
注意:频繁的update和delete操作已经违背了Hive的初衷。不到万不得已的情况,还是使用增量添加的方式最好。
实验步骤
一、实验环境准备
1.首先在Linux本地新建/data/hive2目录。
mkdir -p /data/hive2
mkdir -p /data/hive2
2.切换到/data/hive2目录下,使用wget命令,下载http://59.74.172.143:60000/allfiles/hive2中cat_group和goods文件。
cd /data/hive2
wget http://59.74.172.143:60000/allfiles/hive2/cat_group
wget http://59.74.172.143:60000/allfiles/hive2/goods
3.输入jps检查Hadoop相关进程,是否已经启动。若未启动,切换到/apps/hadoop/sbin目录下,启动Hadoop。
jps
cd /apps/hadoop/sbin
./start-all.sh
4.开启Hive,首先,需要保证Mysql启动。执行以下命令,查看Mysql的运行状态。
sudo service mysql status
输出显示Mysql未启动。执行以下启动命令。
sudo service mysql start
然后切换到/apps/hive/bin目录下,开启Hive。
cd /apps/hive/bin
./hive
二、Hive数据仓库的操作
1.在Hive中创建一个数据仓库,名为DB。
create database DB;
2.以上简单创建了一个DB库,但是这条sql可以更进一步的优化,我们可以加上if not exists。
create database if not exists DB;
解析:在创建库时,应避免新建的库名与已有库名重复,如果库名重复将会报出以下错误(我在已有DB库的前提下,再次创建了DB库)。
错误提示数据仓库DB已经存在, 那么加入的if not exists就起了作用,如下(在已有DB库的前提下,再次创建DB库,提示成功不会报错)
加入if not exists的意思是如果没有DB库就创建,如果已有就不再创建。
3.查看数据仓库DB的信息及路径。
4.删除名为DB的数据仓库。
drop database if exists DB;
三、Hive数据表的操作
Hive的数据表分为两种:内部表和外部表。
Hive创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径, 不对数据的位置做任何改变。在删除表的时候