管理表
默认创建的表都是 管理表,也称为 内部表。建表时没有 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
