Hive的交互方式
-
方式1
hive #个人测试
-
方式2(生产环境)
hive -e "show databases;" #直接执行HiveSQL命令 hive -f test1.sql #直接执行HiveSQL脚本 (生产环境)
-
方式3-beeline
1、beenline是Hive的第二代客户端 #个人测试 2、操作方式 [root@node3 ~]# beeline beeline> !connect jdbc:hive2://node3:10000 Connecting to jdbc:hive2://node3:10000 Enter username for jdbc:hive2://node3:10000: root Enter password for jdbc:hive2://node3:10000:123456 3、我们可以使用expect脚本来实现一键进入beenline
Hive的基础操作
Hive的数据库操作
- 概念
1、当我们在hive中创建一个数据库,则Hive默认会自动会在/user/hive/warehouse/目录下创建一个数据库目录
create database if not exists myhive; #/user/hive/warehouse/myhive.db
2、当我们在Hive中创建一个数据库,则Hive会在MySQL中记录一条元数据
- 操作
-- 1、创建数据库
create database if not exists myhive;
-- 2、创建数据库并手动指定数据库存放目录
create database if not exists myhive2 location '/myhive2'
--3、查看数据库的元数据信息
desc database myhive;
--4、删除数据库
drop database mytest; -- 只能删除空数据库
drop database myhive2 cascade ; -- 可以删除任何数据库(强删)
Hive的表操作
Hive的数据类型
Hive中常见的数据类型有三种:string、int/tinyint 、 double/decimal(10,2)
(重点)Hive表操作1-内部表和外部表
-
前置内容
1、Hive表文件默认的分隔符是'\001' 2、Hive默认不允许对数据进行删除和修改,不支持update和delete delete from stu where id = 2; #报错 update stu set name = 'ls2' where id = 2; #报错 truncate table stu; #不会报错,支持 3、Hive中创建表,自动在HDFS的数据库目录创建对应的表目录(如果加了location关键字则除外),默认表目录的名字和表名一样
-
内部表
1、内部表是私有表,一旦给表加载数据之后,内部表认为这份数据就是他独占的,表一旦删除,表数据文件会跟着全部删除,如果在应用中,数据是部门内部的,或者个人的,则表可以设置为内部表,不会对其他人造成影响。 2、外部表创建语法: create table 表
use myhive; -- 1、创建内部表-使用默认分隔符:'\001' create table stu(id int, name string); -- 加载数据 insert into stu values (1,'zs'); insert into stu values (2,'ls'); select * from stu; -- 2、创建内部表-使用指定分隔符: ',' create table stu2(id int, name string) row format delimited fields terminated by ','; insert into stu2 values (1,'zs'); insert into stu2 values (2,'ls'); -- 开启本地模式 set hive.stats.column.autogather=false; set hive.exec.mode.local.auto=true; --开启本地mr -- 3、通过复制表结构来建表 create table stu3 as select * from stu2; -- 即复制表结构,又复制数据 create table stu4 like stu2; -- 仅复制表结构 -- 4、查看表的元数据信息 desc stu2; -- 查看字段信息(简单) desc formatted stu2; -- 查看详细的元数据信息 -- 5、删除表 -- 内部表删除,将表数据和元数据全部删除 drop table stu2; select * from stu; -- 6、给表加载数据(最正式的) - 本地 -复制 create table stux(id int, name string) row format delimited fields terminated by '\t'; -- 从本地加载--复制 load data local inpath '/export/data/hivedatas/1.txt' into table stux; select * from stux; -- 6、给表加载数据(最正式的) - HDFS - 剪切 create table stuy(id int, name string) row format delimited fields terminated by '\t'; load data inpath '/input/hivedatas/1.txt' into table stuy; select * from stuy;
-
外部表
1、外部表是公有表,一旦给表加载数据之后,外部表认为这份数据大家的,表一旦删除,表数据文件不会删除,只删除表和文件之间的映射关系,如果在应用中,数据是各部门共享,则可以设置为外部表,你的表只是对文件有访问权。 2、外部表创建语法: create external table 表...
-- 1、创建外部表 create external table teacher ( tid string, tname string ) row format delimited fields terminated by '\t'; create external table student ( sid string, sname string, sbirth string, ssex string ) row format delimited fields terminated by '\t'; -- 加载数据 load data local inpath '/export/data/hivedatas/student.txt' into table student; load data local inpath '/export/data/hivedatas/teacher.txt' into table teacher; select * from student; select * from teacher; -- 删除表,只删除元数据,不会删除表数据 drop table teacher;
多个外部表共享数据
-- 模拟多张表共享一份数据
drop table covid1;
create external table covid1(
date_val string,
country string,
state string,
code string,
cases int,
deaths int
)
row format delimited fields terminated by ','
location '/input/covid';
select * from covid1;
create external table covid2(
date_val string,
country string,
state string,
code string,
cases int,
deaths int
)
row format delimited fields terminated by ','
location '/input/covid';
select * from covid2;
-- 删除covid1
drop table covid1;
select * from covid2;
-- 删除covid2
drop table covid2;
select * from covid2;