hive教程:管理表(内部表)和外部表 作者:马育民 • 2021-03-13 21:33 • 阅读:10281 # 管理表 默认创建的表都是 **管理表**,也称为 **内部表**。建表时没有 `external` 关键字 删除表,会删除 `mysql` 中的 **元数据信息**,也会 **删除 HDFS 中的数据文件**。 默认将这些表的数据存储 `/hive/warehouse` 子目录下,也可以指定 HDFS 存储位置 > 可通过 `hive-site.xml` 中的 `hive.metastore.warehouse.dir` 查看 # 外部表 创建表时要有 `external` 关键字 删除表,只会删除mysql中的元数据信息,**不会删除 HDFS 中的数据文件** 可以指定 HDFS 存储位置 **生产环境中使用较多** ### 使用场景1 [](https://www.malaoshi.top/upload/pic/hive/Snipaste_2021-11-23_11-50-32.png) 当 用户 访问 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 原文出处:http://malaoshi.top/show_1IXknzcvI3U.html