0


Hive内部表和外部表的简单区别

Hive内部表:默认创建的表就是内部表。Hive完全管理表(元数据和数据)的生命周期,当删除表时,它会删除源数据以及表的元数据。

Hive外部表:外部表的数据不是Hive拥有或者管理的,只管理元数据的生命周期。要创建一个外部表,需要使用externel关键字。删除外部表时只会删除元数据,而不会删除实际数据(源数据)。在hive外部(HDFS可视化界面)依然可以访问到实际的数据,但是在hive数据库端查询表时没有结果。如下示例。

创建内部表/外部表(图1 innertable,图2 outtable)

图1 innertable

图2 outtable

将存在HDFS端已经建好的文件夹下的数据导入到对应的表中。(图3 内部表数据导入,图4外部表数据导入)

                                                         图3 内部表数据导入

                                                       图4外部表数据导入 

从表中查询数据(图5 内部表数据 ,图6 外部表数据)出现null值是我建表的字符分割的时候没有将格式写正确。

                       ![](https://img-blog.csdnimg.cn/9e8d8380c3654107a6826c4769de8e72.png)

                       图5 内部表数据

                    ![](https://img-blog.csdnimg.cn/64cc36a20b764fa5bdbb4df7d7495093.png)

图6 外部表数据

在master:9870可视化界面查看建表的信息以及所在的数据。(图7 innertable,图8 outtable)

图7 innertable

图8 outtable

删除建好的两个表,并在master:9870可视化界面上查看结果,显示外部表数据还在(图10)

图9

图10

内部表

外部表

创建方式

默认情况创建都为内部表

使用external关键字创建

Create external table 表名

Hive管理范围(权限)

元数据、表数据

元数据

删除表结果

删除元数据、同时删除HDFS上文件数据

只会删除元数据,不会删除HDFS上文件数据

操作

支持ARCHIVE,UNARHIVE,TRUNCATE,MERGE,CONCATENATE

不支持

事务

支持ACID/事务性

不支持

缓存

支持结果缓存

不支持

总结:

建表时未被external修饰的是内部表,被external修饰的为外部表;内部表数据由hive自身管理,外部表数据由HDFS管理,内部表数据存储位置为hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由自己指定。删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件不会被删除。对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name),Hive创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不会删除数据。这样外部表相对来说更加安全,数据组织也更加灵活,方便共享源数据,可以使多个外部表同时使用一份数据。

标签: hive 大数据 hadoop

本文转载自: https://blog.csdn.net/Dream_chang/article/details/126317057
版权归原作者 Dream_chang 所有, 如有侵权,请联系我们删除。

“Hive内部表和外部表的简单区别”的评论:

还没有评论