零 : 进入 beeline
1 ,启动服务 : nohup hiveserver2 1>/dev/null 2>&1 &
2 ,关闭服务 : kill -9
3 ,查看服务状态 : netstat -nltp | grep 10000
4 ,客户端连接 : beeline -u jdbc:hive2://node01:10000 -n root
5 ,断开连接 : !quit
一 ,库操作 :
1 ,查看所有库 :show databases;
2 ,使用库 : use sfl;
3 ,建库 :
- 完全语句 :
create database IF NOT EXISTS test COMMENT ‘测试数据库’ LOCATION ‘/ruozedata’ WITH DBPROPERTIES (‘creater’=‘liuzd’,‘date’=‘20180605’);
- 解释 :
IF NOT EXISTS:如果不存在则创建
COMMENT:添加注释
LOCATION:指定hdfs存放路径
WITH DBPROPERTIES:添加自定义属性
- 常用语句 :建库
create database ourhome;
4 ,查看当前库
select current_database();
5 ,删库,同时删除数据 :
DROP DATABASE IF EXISTS ourhome CASCADE;
二 ,表操作 :
1 ,建表:分隔符
- 用 “,” 作为分隔符 : 逗号
create table movie (id int,name string) row format delimited fields terminated by ',';
- 查看表结构 : desc movie;
- 造数据 : movie1.txt
1,lmfj
2,hldwm
3,whtt
4,tthw
- 把文件上传到 hdfs :/user/hive/warehouse/sfl.db/movie
hdfs dfs -put movie1.txt /user/hive/warehouse/sfl.db/movie
- 查询 :
select * from movie;
- 结果 :
+-----------+-------------+--+
| movie.id | movie.name |
+-----------+-------------+--+
| 1 | lmfj |
| 2 | hldwm |
| 3 | whtt |
| 4 | tthw |
+-----------+-------------+--+
2 ,内部表 - 外部表 :区别
- 内部表 : 数据放在表目录中
比如 : movie 的数据放在这个目录下 ,/user/hive/warehouse/sfl.db/movie
- 外部表 : 数据可以放在任何地方,反正不在自己的表目录下
- 使用 :
1 ,外部表 : 数据采集过来以后, hive 使用外部表与数据建立映射关系。
2 ,内部表 : 把 hive 的数据分析结果,存在在内部表中。
3 ,删除表 :
- 删除内部表 : 会删除元数据和存储数据。
- 删除外部表 : 仅仅会删除元数据,不删除 hdfs 中的数据。
- 代码 :
drop table if exists res;
- 删除分区表 :
alter table user_behaviour drop partition(partition_key=20180620);
4 ,建表 : 分隔符,外部表
- 语句 :指定分隔符,指定数据存储路径
create external table stu_ext(id int,name string) row format delimited fields terminated by ',' location '/logs/stu';
- 建文件 :cat stu.info
1,slf
2,wtt
3,sjw
4,sjy
5,sswen
6,sswu
- 上传文件 :
hdfs dfs -put stu.info /logs/stu
- 查询数据 :
select * from stu_ext;
5 ,分区表 : 分目录
- 目的 : 每天都有数据产生,如果把数据都放到一起,那么数据将会膨胀到越来越大
- 代码 : 内部分区表
create external table book(id int,name string) partitioned by(day string) row format delimited fields terminated by ',';
- 建文件 :vim day20190706
1,java
2,php
3,html
4,ps
5,ps
- 建文件 :vim day20190707
1,你是人间四月天
2,三体
3,修身养性
- 向表中导入数据 :beeline 操作
load data local inpath '/root/hivetest/day20190706' into table book partition(day='20190706');
- 再次导入 :另一组数据
load data local inpath '/root/hivetest/day20190707' into table book partition(day='20190707');
- 成功的标志 : 去这里 /user/hive/warehouse/sfl.db/book,能看到如下的两个目录:

- 注意 : 分区字段也是字段,不能跟表中的已有字段冲突。
- 查询 : select * from book where id=1 and day=‘20190707’;
6 ,CTAS 建表 :复制表结构 : like
- 建表,同时复制别人的表结构 :
- 代码 : create table book1 like book;
- desc book1;
6 ,CTAS 建表 :复制表结构,数据 : as
create table book2 as select id,name from book;
7 ,导入数据的方式 :
- 复制文件到表目录下
- 把本地数据导入 hive 表:
beeline 操作 : load data local inpath ‘/root/hivetest/day20190706’ into table book partition(day=‘20190706’);
beeline 操作 : load data local inpath ‘/root/hivetest/day20190706’ into table book
- 把 hdfs 导入 hive 表:
load data inpath ‘/data/hivetest/day20190706’ into table book
8 ,导入数据,测试 :
- 建表 :
create table stu(id int,name string) row format delimited fields terminated by ‘,’;
- 文件 : vim stu1.txt
1,aa
2,bb
3,cc
4,dd
- 文件 : vim stu2.txt
5,ee
6,ff
7,gg
-
上传到 hdfs :
hdfs dfs -mkdir /data
hdfs dfs -put stu2.txt /data
-
导入本地数据 :
load data local inpath ‘/root/hivetest/stu1.txt’ into table stu;
-
导入 hdfs 数据 :
load data inpath ‘/data/stu2.txt’ into table stu;
-
注意一点 : 重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点重点
hdfs 的数据导入后,就被移动过去了,原数据就没了。
- 查询结果 :
select * from stu;
- 正确的结果 :
+---------+-----------+--+
| stu.id | stu.name |
+---------+-----------+--+
| 1 | aa |
| 2 | bb |
| 3 | cc |
| 4 | dd |
| 5 | ee |
| 6 | ff |
| 7 | gg |
+---------+-----------+--+