Hive四种表的应用

Hive四种表的应用:

1.内部表:
Hive默认创建的表类型为内部表

特点:
当表定义被删除的时候(如:drop table stu),表中的数据一并被删除(HDFS数据目录,源数据库表文件一并被删除);

使用场景:
多用来存储一些非业务类型数据,如:各省及对应区号表,全球每个国家及对应代码表。
而每天收集的业务数据尽量不要定义成内部表,这样即使表删除了,数据还在。

创建内部表,并加载数据:
create table order2 (id int,name string,value float) row format delimited fields terminated by ‘,’;

insert into order2(id,name,value) values (1,“xiaoming”,10000);//命令行插入

load data local inpath ‘/opt/mysoft/su.txt’ into table order2;//加载本地文件

load data inpath ‘hdfs://qiku1:9000/yjy’ into table order2;//加载HDFS文件到表中(系统自动删除了原有的HDFS文件)

2.外部表:
外部表只是对HDFS上相应文件的一个引用,仅此而已,当删除表定义的时候(drop table stu),表中的数据依然存在(HDFS数据目录仍然存在)。

特点:
当表定义被删除的时候(如:drop table stu),数据仍然存在。

使用场景:
多用来存储一些业务类型数据
如收集的业务数据 ,即使表删除了,数据还在。

创建外部表:
create external table jing(id int,name string,value float) row format delimited fields terminated by ‘,’ location ‘/guangzhou’;

load data local inpath ‘/opt/mysoft/su.txt’ into table jing;//插入数据

load data inpath ‘hdfs://qiku1:9000/yjy’ into table jing;//插入HDFS文件到表中(系统自动删除了原有的HDFS文件)

3.分区表
根据插入数据的标识(partitioned)创建不同的目录。

使用场景:
可以通过分区表,将每天搜集的数据进行区分,查询统计的时候通过指定分区,提高查询效率。

创建分区表:
create table order3(id int,name string,value float) partitioned by (cur_date string) row format delimited fields terminated by ‘,’;

插入数据:
loa加粗样式d data local inpath ‘/opt/mysoft/su.txt’ into table order3 partition (cur_date=‘20191009’);
load data local inpath ‘/opt/mysoft/su.txt’ into table order3 partition (cur_date=‘20191010’);

查看HDFS目录,在表目录下根据分区标号生成不同的目录

查看表已经生成了那些分区:
show partitions order3;
Hive四种表的应用

手动创建一个分区(空目录):
alter table order3 add partition(cur_date=‘20191011’);

删除一个分区(数据也删掉):
alter table order3 drop partition(cur_date=‘20191010’);

将分区标识作为条件进行查询:
select * from order3 where cur_date=‘20191009’;
select * from order3 where cur_date=‘20191009’ and id=1;

桶表:
通过对数据进行哈希码取值,然后放到不同文件中存储,每个桶文件 = 数据的哈希值 % 总桶数量。

特点:
根据数据哈希值分别放入不同的文件目录中。

使用场景:
可以根据每行数据的哈希值,分别放入不同的目录文件中,多用于数据抽查。

创建桶表:(间隔一定要与源表的数据间隔一致)
create table sheng3(id int,name string,value float) clustered by (id) into 4 buckets row format delimited fields terminated by ‘,’;

插入之前,先开启数据分桶开关,否则数据不分桶操作:
set hive.enforce.bucketing=true;//开启数据分桶开关
insert into table sheng3 select * from jing;//插入
Hive四种表的应用

总结:
1.通过load data inpath ‘HDFS目录’ into table stu;加载数据后,系统会会删除掉HDFS目录对应的数据。
2.生产环境中,往往创建外部表用来存储业务数据。
3.桶表多用来数据抽样。
4.不能简单的通过load data 方式插入桶表,尽管数据能插入成功,但未按规则分配到桶目录中。
插入桶数据之前,先开启数据分桶开关,否则数据不分桶操作。