hive教程:管理表(内部表)和外部表

管理表

默认创建的表都是 管理表,也称为 内部表。建表时没有 external 关键字

删除表,会删除 mysql 中的 元数据信息,也会 删除 HDFS 中的数据文件。

默认将这些表的数据存储 /hive/warehouse 子目录下,也可以指定 HDFS 存储位置

可通过 hive-site.xml 中的 hive.metastore.warehouse.dir 查看

外部表

创建表时要有 external 关键字

删除表,只会删除mysql中的元数据信息,不会删除 HDFS 中的数据文件

可以指定 HDFS 存储位置

生产环境中使用较多

使用场景1

当 用户 访问 web页面、app时,产生数据,经过 web服务保存到 HDFS 中

数据分析部分,通过 hive对 HDFS 文件进行分析,分析后,如果不需要使用该表的时候可以 删除该表,但是不会删除数据

数据的产生是一个部门,数据的分析是另一个部门,数据不应被分析部门轻易的删除

使用场景2

对于大型网站的日志,一般会有专门的部门来进行日志处理,处理完后会将日志保存到hdfs中,比如保存的路径:/hdfs/sitelog,文件名如下:

20190212.txt
20190213.txt
20190214.txt

现在有两个业务部门:数据挖掘部门 和 机器学习部门,他们都需要 对这个日志进行分析

如果以管理表的方式存储在hive中

那么hdfs上的文件路径:/user/dept1/hive,文件名如下:

20190212.txt
20190213.txt
20190214.txt

/user/dept2/hive,文件名如下:

20190212.txt
20190213.txt
20190214.txt

这样本来在hdfs上每个文件保存有三份,如果使用管理表,那么每个文件将会保存 9份,对存储空间造成极大的浪费。

这个时候就需要使用 外部表的特性,外部表在创建表的时候可以 指定数据文件的路径,比如 /hdfs/sitelog

后面如果不需要使用该表的时候可以 删除该表,但是不会删除数据。而管理表在删除表的时候会将数据一起进行删除。

https://blog.csdn.net/xjjdlut/article/details/87950688


原文出处:/show_1IXknzcvI3U.html