hive 建表_Hive建表和内外部表的使用

一、普通建表方式

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;

另外的方式

官网

7aa0f8d7bf96bf0bc660dcd9d57850f2.png
a3841ff6726bd27018d4d22dbda0c90d.png

二、子查询方式建表

e8f261f641235dae1afe03d4df79a3f8.png

我们练习下

创建一个练习库

e8564f319cc6b7d500bd51d1f65cfe96.png

创建一个普通表

create table normal(

id int,

name string

)ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '

5c68b473c40439d33b0e94866b9e172d.png

我们装载数据

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

b1e4204c04257c833807f48d855d282e.png

我们看数据是存在的

81d6409b4c61a6c971dea79bf66a5e2b.png

我们利用子查询生成新表

create table normal_zcx_t as select * from normal;

5a2d1e3cc453ae8b56ee505a6cc253f6.png

实际在跑MapReduce

287d8aacfb52a26e345de09fd24a283c.png

我们查看表和数据

92b99a88209a15862f3b1402ebd882ea.png
5db6293e116f2c3d9c2b1c9d99bf95ec.png

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

85e80538c05859ee750ed59d8774cfca.png

表结构也一样

c24c065f2d8aa1ed6e0f9f232da8afd5.png

我们再看下HDFS

805af4a44fe2c194b2dbae73c9efbeaf.png
cba949f16844523f4b950cc8250268b1.png
54d959a058ee24b650e27ea3d04d35a4.png

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

三、Like建表

371147cf11edbfd50f59b7f6434feac3.png

我们建表

create table normal_like_t like normal;

1fc67233b30f303778fb4d7c71e4db24.png

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

元数据和HDFS都有

03d9a494df35e8cf426ae55ee318d985.png
839e95b3fa4245f15f130fe2f6079093.png

四、数据共享

我们重新创建一个数据库

8b46828fd7d29e82bd50f92419354e41.png

创建员工表

1c83c3b9efc7396b2580ddd738647b65.png

创建部门表

268b8c856b4b679625b1cc49da8b54d3.png

导入数据

78e56a5277231bd2f4c4b6f67e51798d.png
44d4cad2b61252e5f51ad4a5c0c47f05.png

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

520fdbbeff16d0e05ff8430491cb974f.png
f2d3b6a766bd80b798f52d0bb2360829.png

可以看到表

3907dd4707bee91bace21a6f891d6f7b.png

元数据也有

8d1e7f80fece643768b23673f1df53f9.png

数据也有

66ca0aa8ea171d763fc079bffe15d9c9.png

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

83cbeca3d0eb93410ddbe760fcc58f03.png

那我们重新加载数据呢?

7bd34fb45d912bb066f73fdc26491897.png

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

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

d1bf08a281fd7d5af9fab2fef9be0faf.png

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

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

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

建表中,这有两个关键字

cebd9f37b8e909d87c16d4a91963282a.png

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

cf4709635cc7e10dda06f4e196d6bc2f.png

我们先看TEMPORARY

我们创建

99fdf74546cb101a7ff90c9e18e2a656.png

我们导入数据

96f1c9d5b595578cc19f4f9aa908a80e.png

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

43970fcbc2bd423a87199fea6c3d3a85.png

用desc formatted查看,信息是有的

c30f469a5acc834ef193744943ac652f.png

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

0958a1e1643a18bb73493ad67b333f74.png

查看一下HDFS

4cbb10e3860acf186291095ff284c08c.png

这就是临时表的一些特点

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

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

我们创建EXTERNAL表

11f48925469698205093b6b3f82a1d4b.png
89c45e691e2706e83d0503bcf8d16b67.png

我们看元数据

dd0f1408777c6765abf5ea50407d483d.png

Formatted

4c819076c7a474925c3b2731e5f25084.png

我们再dept中加载数据

ef26742b50dd6222df4a91ff28073195.png

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

3843f840f3f19d3db1f442baf3dea494.png

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

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

27c8075e7720e48a6e634bb2e37777b7.png

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

9138e2dffe2a7c2525d362005286d27a.png

元数据也没了

4108985c832c1492c9c73575d7b34e99.png

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值