Hive四种表类型

4种表类型

Hive的表就是在HDFS上新建了一个目录,并制定了数据文件的分隔符,目录下的文件便是数据来源,文件中的分隔符必须与建立表的分隔符一致工具

Hive有内部表、外部表、分区表、分桶表4种类型以知足不一样的业务场景,简化使用方式,提升生产速度。优化

内部表

说明:先使用命令建立表,而后在加载文件数据到表中编码

命令:spa

create table table_name (column_name type,[column_name type]...) row format delimited fields terminated by '\t';orm

load data local inpath 'file_path' into table table_name;资源

使用场景:string

在新系统建设初期,对需求明确,先有表,系统上线,数据入表hash

其余:it

删除内部表时会将表的数据一并删除io

drop table table_name;

能够直接使用相关工具往表对应的HDFS文件目录下上传文件,Hive便可查询出来

外部表

说明:数据文件已经存在,而后使用命令建立表并指定表的数据文件路径

命令:

create external table (column_name type,[column_name type]...) table_name row format delimited fields terminated by '\t' location 'file_path';

使用场景:

系统已经上线,新需求来了,现有的表没法支撑新需求,所以须要新建一张表

其余:

删除外部表时不会删除它关联的数据文件

drop table table_name;

分区表

说明:

根据业务编码、日期、其余类型等维度建立分区表,好比一个重庆市的9个区域各自一个分区,若是要查某一个区域的数据,只须要访问一个分区的数据,而不须要从全量数据中进行筛选。

分区底层实现逻辑为:

在一个表对应的目录下,一个分区对应一个目录

命令:

create table table_name (column_name type,[column_name type]...) partitioned by (column_name type) row format delimited ternimated by '\t';

select * from table_name where partition_column_name = value;

使用场景:

单表数据量巨大,并且查询又常常限定某一个类别,那么能够将表按照该类别进行分区,以提升数据查询效率,减小资源开销

其余:

直接在HDFS里面建立分区目录,HIVE是没法识别的,由于MySQL中元数据不包含此分区

分桶表

说明:

将大表进行哈希散列抽样存储,方便作数据和代码验证。好比将表分红10分,每次只拿其中的十分之一来使用,能够快速的获得结果

分桶底层实现逻辑:

在表对应的目录下,将源文件拆分红N个小文件

命令:

开启分桶功能,强制多个 reduce 进行输出:

set hive.enforce.bucketing=true;

准备主表:

create table teacher(id int,name string) row format delimited fields terminated by '|';

向主表加载数据:

load data local inpath '/root/work/teachers.txt' into table teacher;

建立带桶的 table :

create table teacher_temp(id int,name string) clustered by (id) into 2 buckets row format delimited fields terminated by '|';

从主表向分桶表导入数据:

insert overwrite/into table teacher_temp select * from tacher; 分桶表其实就是将表中的数据按照hash分桶的方式分桶存放,而所谓的桶就是表文件夹下不一样的文件

使用场景:

对于一个庞大的数据集咱们常常须要拿出来一小部分做为样例,而后在样例上验证咱们的查询,优化咱们的程序,利用分桶表能够实现数据的抽样

相关文章
相关标签/搜索