[Hive] hive的内部表和外部表

2019-08-07  本文已影响0人  LZhan

早上在地铁上不经意看到这个问题,隐约记得自己曾经整理过,不过现在已经不是很清晰,只能记得内部表和外部表区别是有无external修饰,删除内部表数据是元数据与存储在hdfs上的数据一起删除掉,但是外部表删除仅仅删除元数据;
所以说记得笔记,转载的博客得常常看啊!

1、内部表

创建内部表的语句:

create table test  (name string,age string) location '/input/table_data'

上传数据到表中:

load data inpath  '/input/data' into table test

这里会将hdfs的/input/data目录下的数据转移到test表数据的存储目录,即/input/table_data目录下。

在我们删除test表之后,会将test表的数据和元数据信息全部删除,即最后的/input/table_data下没有数据

所以在工作中,相对于内部表,更多的是创建外部表

2、外部表

创建外部表的语句:会带有EXTERNAL关键字

 CREATE EXTERNAL TABLE IF NOT EXISTS persona.location_info
(
  member_id         BIGINT  COMMENT '会员Id',
  is_da             BOOLEAN COMMENT '是否会员',
  city              STRING  COMMENT '常居地'
)
STORED AS PARQUET
LOCATION '/persona/data/location_info'

工作中,给一张新建的hive外部表导入数据,一般就是:

result.write.mode(SaveMode.Overwrite).parquet("/persona/data/location_info")

将查询得到的数据以parquet格式写到表存储的路径上。

一般是不会使用insert,就算只是插入一条记录也会进行MapReduce操作

3、说说上面提到的元数据信息

相关博客链接:
https://www.cnblogs.com/1130136248wlxk/articles/5517909.html
https://www.jianshu.com/p/ccf9c8a43e61
<1> hive版本表
version:存储hive的版本信息的表,有且只能有一条记录,多或者少都不行
<2> 数据库相关的表

image.png

dbs是主表,dbs示例数据:


image.png

<3> 还有与表相关的表,分区相关的表等等

上一篇 下一篇

猜你喜欢

热点阅读