Hive建表和内外部表的使用

原文链接:

https://www.toutiao.com/i6766784274965201415

 

一、普通建表方式

create table stu_info(

id int,

name string

)ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '

载入数据

load data local inpath '/data/hivetest/stu_info_local' into table stu_info;

load data inpath '/data/hivetest/stu_info_local' into table stu_info;

另外的方式

官网

Hive建表和内外部表的使用

 

Hive建表和内外部表的使用

 

二、子查询方式建表

Hive建表和内外部表的使用

 

我们练习下

创建一个练习库

Hive建表和内外部表的使用

 

创建一个普通表

create table normal(

id int,

name string

)ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '

Hive建表和内外部表的使用

 

我们装载数据

load data local inpath '/data/hivetest/stu_info_two' into table normal;

Hive建表和内外部表的使用

 

我们看数据是存在的

Hive建表和内外部表的使用

 

我们利用子查询生成新表

create table normal_zcx_t as select * from normal;

Hive建表和内外部表的使用

 

实际在跑MapReduce

Hive建表和内外部表的使用

 

我们查看表和数据

Hive建表和内外部表的使用

 

Hive建表和内外部表的使用

 

我们可以看到元数据也存在

Hive建表和内外部表的使用

 

表结构也一样

Hive建表和内外部表的使用

 

我们再看下HDFS

Hive建表和内外部表的使用

 

Hive建表和内外部表的使用

 

Hive建表和内外部表的使用

 

所以子查询将查询的数据和表的结构赋予一张新的表

三、Like建表

Hive建表和内外部表的使用

 

我们建表

create table normal_like_t like normal;

Hive建表和内外部表的使用

 

只有表结构,没有数据,但是相对于子查询没有MapReduce执行,速度会快很多。

元数据和HDFS都有

Hive建表和内外部表的使用

 

Hive建表和内外部表的使用

 

四、数据共享

我们重新创建一个数据库

Hive建表和内外部表的使用

 

创建员工表

Hive建表和内外部表的使用

 

创建部门表

Hive建表和内外部表的使用

 

导入数据

Hive建表和内外部表的使用

 

Hive建表和内外部表的使用

 

我们创建表引用另外一个表的文件,比如引入我们的dept表的文件

Hive建表和内外部表的使用

 

Hive建表和内外部表的使用

 

可以看到表

Hive建表和内外部表的使用

 

元数据也有

Hive建表和内外部表的使用

 

数据也有

Hive建表和内外部表的使用

 

我们把dept_yr数据清空,会发现dept的数据竟然也没有了

Hive建表和内外部表的使用

 

那我们重新加载数据呢?

Hive建表和内外部表的使用

 

这时候我们明白了,它俩在一起关联的,添加和清除在一起。

如果删除的话 drop table dept_yr;数据还是清空

Hive建表和内外部表的使用

 

所以这种方式建表,他们是互相影响的。

数据共享一份数据,删除的时候就把共享的数据删除

删除表也会把元数据数据删除,清除HDFS上的文件

建表中,这有两个关键字

Hive建表和内外部表的使用

 

如果我们不加这两个关键字,表默认是管理表

Hive建表和内外部表的使用

 

我们先看TEMPORARY

我们创建

Hive建表和内外部表的使用

 

我们导入数据

Hive建表和内外部表的使用

 

去查询元数据,发现没有信息

Hive建表和内外部表的使用

 

用desc formatted查看,信息是有的

Hive建表和内外部表的使用

 

我们看其中的数据存放路径

Hive建表和内外部表的使用

 

查看一下HDFS

Hive建表和内外部表的使用

 

这就是临时表的一些特点

如果关闭的话,就会自动删除临时表,也可以手动删除,常作为临时结果使用。

如果用location+temporary共享数据会发生什么呢?可以做个练习。(1)关闭客户端对原始数据的影响?(2)删除临时表对原始数据的影响?(3)如果是清空临时表呢?

我们创建EXTERNAL表

Hive建表和内外部表的使用

 

Hive建表和内外部表的使用

 

我们看元数据

Hive建表和内外部表的使用

 

Formatted

Hive建表和内外部表的使用

 

我们再dept中加载数据

Hive建表和内外部表的使用

 

发现数据在外部表也是有的

Hive建表和内外部表的使用

 

如果我们清空外部表,就会报错

FAILED: SemanticException [Error 10146]: Cannot truncate non-managed table dept_ext.

Hive建表和内外部表的使用

 

那我们删除外部表呢?不会对原始数据产生影响

Hive建表和内外部表的使用

 

元数据也没了

Hive建表和内外部表的使用

 

练习:如果不使用location,直接创建的话,删除表会怎么样?

总结:删除表时,内部表元数据和数据一起删除,而外部表只删除元数据,不会删除数据,以及HDFS上表对应的目录及文件都不会删除。

posted on 2020-03-20 00:24  那山的狐狸  阅读(649)  评论(0编辑  收藏  举报

导航