Hive Shell 表操作

创建管理表(内部表):

创建方式1:

create table [IF NOT EXISTS] test.user
(
id int [COMMENT '该字段的注释'],
name string,
age int
)
[COMMENT '对该表的注释']

//行之间的分隔符为空格
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '

//列之间的分隔符默认为换行符,一般不写
[COLLECTION ITEMS TERMINATED BY '\n']

//存储格式为普通的文本文件,企业多用parquet和orc,效率高
STORED AS textfile 

//表默认会创建在数据库的目录下,也可单独指定:
LOCATION '/user/hive/warehouse/user';

创建方式2:

//子查询创建表
create table IF NOT EXISTS test.user2
AS select id,name from test.user;

创建方式3:

//复制已存在的表

create table IF NOT EXISTS test.user3
LIKE test.user;

加载数据进入表:

//加了local就是linux本地文件,没加就是hdfs上的文件
//本质是直接将数据文件复制到该表的目录下,方便快捷
//overwrite 覆盖数据

load data local inpath '/opt/datas/user.txt' [overwrite] into table test.user;

hdfs目录下:
在这里插入图片描述

创建外部表(加了一个external):

//外部表与内部表区别:删除外部表不会删除表数据,只删除元数据;
//					删除内部表既删除表数据,也删除元数据;
//					即删除外部表后,在hdfs下的表的目录还在,只是hive中搜不到该表

create EXTERNAL table [IF NOT EXISTS] db_hive.user_ext
(
id int [COMMENT '该字段的注释'],
name string,
age int
)
[COMMENT '对该表的注释']

//行之间的分隔符为空格
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '

//列之间的分隔符默认为换行符,一般不写
[COLLECTION ITEMS TERMINATED BY '\n']

//存储格式为普通的文本文件,企业多用parquet和orc,效率高
STORED AS textfile 

//表默认会创建在数据库的目录下,也可单独指定:
LOCATION '/user/hive/warehouse/user';

创建分区表:

//分区表即在hdfs目录下,在该表的目录下将那些数据文件分成多个目录,
//不用每次查询都将所有数据加载出来,

create table IF NOT EXISTS test.user_partitioned
(
id int,
name string,
age int
)
PARTITIONED BY (date string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
STORED AS textfile;

分区表中加载数据:

load data local inpath '/opt/datas/user.txt' into table test.user_partitioned 
partition(date='2018/12/1');

hdfs中分区表目录:
在这里插入图片描述

查看分区表中数据:

//若是普通表查找会在整个表目录下加载所有数据文件,
//而分区表加了个分区字段可以只查询某个分区的数据文件

select * from test.user_partitioned where date='2018/12/1';
select * from test.user_partitioned where date='2018/11/30';

多级分区表:

create table IF NOT EXISTS test.user_partitioned_multiple
(
id int,
name string,
age int
)
PARTITIONED BY (month string,day string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
STORED AS textfile;

hdfs目录结构:
在这里插入图片描述

在这里插入图片描述

分区表分区未写入元数据中:

第一种修复方式:

//用于手动在hdfs下分区表目录下添加分区目录,但为写入表元数据,需修复

//例:
//	 dfs -mkdir -p  /user/hive/warehouse/table_name/day=12;
//	 dfs -put /opt/datas/user.txt  /user/hive/warehouse/table_name/day=12;

msck repair table table_name;

第二种修复方式(企业多用):

//用于手动在hdfs下分区表目录下添加分区目录,但为写入表元数据,需修复

alter table table_name add partition(day='12');

查看表有多少个分区:

show partitions table_name;

清除表数据:

truncate table test.user;

修改表的名称:

alter table user rename to user10;

删除表:

drop table if exists test.user10;

猜你喜欢

转载自blog.csdn.net/weixin_41227335/article/details/84675726
今日推荐