Hive的基本简单使用
一、创建表
1、进入Hive环境
hive shell;
2、Create DataBase
create database myuserDb;
3、show DataBases
show database;
4、Delete a DateBase
- drop database + name of database
- exam:
drop database myuserdb;
5、Create a Table
- create [+ external] + table + ‘name of table’ +
create external table t_user(id int ,name string) row format delimited fields terminated by ',' lines terminated by '\n';
注:在进行表操作之前不指定数据库,会在默认default数据库中操作
6、Show Tables
- 指定default数据库
use default;
- Show tables
show tables;
7、导入数据
- ① 先在进入hive shell的目录下创建一个文件 test.txt
- ② 导入文件到数据库
LOAD DATA LOCAL INPATH 'test.txt' OVERWRITE INTO TABLE t_user;
- ③ 查看t_user表数据
select * from t_user;
- ④复杂语句生成MapReduce
select count(*) from t_user;
二、分区PARTITIONED
1、创建表
CREATE TABLE person(
id INT, name STRING,
age INT,
fav ARRAY<STRING>,
addr MAP<STRING,STRING>)
COMMENT 'This is the person table'
PARTITIONED BY(dt STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY '-'
MAP KEYS TERMINATED BY ':'
STORED AS TEXTFILE;
2、查看表结构
desc person;
3、导入数据
- ① 创建person.txt 文件
- ② 导入数据到person表
LOAD DATA LOCAL INPATH 'person.txt' OVERWRITE INTO TABLE person partition (dt='20170315');
LOAD DATA LOCAL INPATH 'person.txt' OVERWRITE INTO TABLE person partition (dt='20200415');
LOAD DATA LOCAL INPATH 'person.txt' OVERWRITE INTO TABLE person partition (dt='20200421');
- ③ 查看数据
select * from person;
- ④ 分区查询
select fav[0] from person where dt='20170315';
- ⑤不分区查询
select fav[0] from person;
4、Hive数据存放在HDFS的哪个位置?
- 在安装目录的conf文件夹下查看hive-site.xml文件
- 进入HDFS文件系统查看
三、分桶
1、概念:
- 分桶是相对分区进行更细粒度的划分。分桶将整个数据内容按照某列属性值得hash值进行区分
2、创建表
-
CREATE TABLE person1(
-
id INT, name STRING,
-
age INT,
-
fav ARRAY<STRING>,
-
addr MAP<STRING,STRING>)
-
COMMENT 'This is the person table'
-
PARTITIONED BY(dt STRING)
-
clustered by (id) into 4 buckets
-
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
-
COLLECTION ITEMS TERMINATED BY '-'
-
MAP KEYS TERMINATED BY ':'
-
STORED AS TEXTFILE;
3、导入数据到person1表
- ① 创建person.txt文件
- ② 导入数据
LOAD DATA LOCAL INPATH 'person.txt' OVERWRITE INTO TABLE person1 PARTITION(dt='20200511')
- ③ 按桶查询
select * from person1 tablesample(bucket 1 out of 4 on id);
- ④ 数据存放
- 原数据文件仍然以分区存在,不以桶的形式存在,其实分桶已经生效,查询效率大大提高。
四、HIve外部表和内部表
- 概念:
- ①MANAGED_TABLE,默认是内部表(托管表);②EXTERNAL_TABLE是外部表。
③在创建命令前加external 关键字就是外部表
- ①MANAGED_TABLE,默认是内部表(托管表);②EXTERNAL_TABLE是外部表。
- 区别
- ④内表删除表或者分区元数据和数据都删了;
⑤外表删除表元数据删除,数据保留。
⑥如果数据共享,其他应用也用,就用外部表;否则只是hive用,就用内部表。
- ④内表删除表或者分区元数据和数据都删了;
五、HIve启动后台服务
1、启动后台服务
hive --service hiveserver2 &
2、通过后台服务连接数据库
beeline
!connect jdbc:hive2://+addr:+port root
---------------------------------------------未完待续------------------------------------