Hive-常用操作

2022-12-01 20:30:12 浏览数 (1)

一. 数据库操作

1、创建数据库
代码语言:javascript复制
//用户可以用 IF NOT EXISTS 选项来忽略这个异常。
 create database [ if not exists ] myhive ;
2、创建数据库并指定hdfs存储位置
代码语言:javascript复制
create database myhive2 location '/myhive2';
3、修改数据库,可以使用alter database 命令来修改数据库的一些属性。但是数据库的元数据信息是不可更改的,包括数据库的名称以及数据库所在的位置
代码语言:javascript复制
alter  database  myhive2  set  dbproperties('createtime'='202004090');
4、查看数据库详细信息

①查看数据库基本信息

代码语言:javascript复制
desc  database  myhive2;

②查看数据库更多详细信息

代码语言:javascript复制
desc database extended  myhive2;  
5、删除数据库

① 删除一个空数据库,如果数据库下面有数据表,那么就会报错

代码语言:javascript复制
drop  database  myhive2;

②强制删除数据库,包含数据库下面的表一起删除

代码语言:javascript复制
drop  database  myhive  cascade; 
//包含数据库下面的表一起删除; 不要执行,危险动作
6、数据库切换
代码语言:javascript复制
 use myhive(自己的数据库名称);

二、Hive的字段类型

分类

类型

描述

字面量实例

原始类型

BOOLEAN

true/false

TRUE

TINYINT

1字节的有符号整数 -128~127

1Y

SMALLINT

2个字节的有符号整数,-32768~32767

1S

INT

4个字节的带符号整数

1

BIGINT

8字节带符号整数

1L

FLOAT

4字节单精度浮点数1.0

DOUBLE

8字节双精度浮点数

1.0

DEICIMAL

任意精度的带符号小数

1.0

STRING

字符串,变长

“a”,’b’

VARCHAR

变长字符串

“a”,’b’

CHAR

固定长度字符串

“a”,’b’

BINARY

字节数组

无法表示

TIMESTAMP

时间戳,毫秒值精度

122327493795

DATE

日期

‘2020-04-29’

INTERVAL

时间频率间隔

复杂类型

ARRAY

有序的的同类型的集合

array(1,2)

MAP

key-value,key必须为原始类型,value可以任意类型

map(‘a’,1,’b’,2)

STRUCT

字段集合,类型可以不同

struct(‘1’,1,1.0), named_stract(‘col1’,’1’,’col2’,1,’clo3’,1.0)

UNION

在有限取值范围内的一个值

create_union(1,’a’,63)

三、内部表操作

1、创建基本数据表(内部表)

代码语言:javascript复制
create table tableName(字段名称 字段类型,字段名称 字段类型)
ROW FORMAT DELIMITED IELDS TERMINATED BY char(char分隔符)
指定数据中字段与字段的分隔符 ‘t’ 或 ‘,’ 或 ‘|’ 或其他
2、创建表并指定字段之间的分隔符
代码语言:javascript复制
create  table if not exists stu2(id int ,name string) row format delimited fields terminated by 't' stored as textfile location '/user/stu2';
3、根据查询结果创建表
代码语言:javascript复制
create table stu3 as select * from stu2;
4、根据已经存在的表结构创建表
代码语言:javascript复制
create table stu4 like stu2;
1
5、查询表的类型
代码语言:javascript复制
desc formatted  stu2;

三、外部表操作

1. 外部表说明 外部表因为是指定其他的hdfs路径的数据加载到表当中来,所以hive表会认为自己不完全独占这份数据,所以删除hive表的时候,数据仍然存放在hdfs当中,不会删掉。 2. 管理表和外部表的使用场景 每天将收集到的网站日志定期流入HDFS文本文件。在外部表(原始日志表)的基础上做大量的统计分析,用到的中间表、结果表使用内部表存储,数据通过SELECT INSERT进入内部表。

1、分别创建老师与学生表外部表,并向表中加载数据

create EXTERNAL table tableName(字段名称 字段类型,字段名称 字段类型) 建外部表需要指定数据的存储路径。通过LOCATION进行指定。

①创建老师表:

代码语言:javascript复制
create external table techer (t_id string,t_name string) row format delimited fields terminated by 't';
1

②创建学生表:

代码语言:javascript复制
create external table student (s_id string,s_name string,s_birth string , s_sex string ) row format delimited fields terminated by 't';
1
2、 从本地文件系统向表中加载数据
代码语言:javascript复制
load data local inpath ‘文件路径’ into table 表名;
1
3、加载数据并覆盖已有数据
代码语言:javascript复制
load data local inpath ‘文件路径’ overwrite into table 表名;
4、 从hdfs文件系统向表中加载数据(需要提前将数据上传到hdfs文件系统,其实就是一个移动文件的操作)
代码语言:javascript复制
cd /export/servers/hivedatas
hdfs dfs -mkdir -p /hivedatas
hdfs dfs -put techer.csv /hivedatas/
load data inpath '/hivedatas/techer.csv' into table techer;

四、修改表

1. 表重命名
代码语言:javascript复制
	alter  table  old_table_name  rename  to  new_table_name;
	//把表score4修改成score5
	alter table score4 rename to score5;
2. 增加/修改列信息
  • 查询表结构
代码语言:javascript复制
desc score5;
  • 添加列
代码语言:javascript复制
alter table score5 add columns (mycol string, mysco string);
  • 查询表结构
代码语言:javascript复制
desc score5;
  • 更新列
代码语言:javascript复制
alter table score5 change column mysco mysconew int;
  • 查询表结构
代码语言:javascript复制
desc score5;
  • 删除表数据
代码语言:javascript复制
truncate table 表名; 
3.删除表
代码语言:javascript复制
drop table score5;

0 人点赞