外部表和内部表区别和实际运用:
前提知识储备:
1、hive存储的数据在hdfs上,建表的时候实际上是在hdfs上创建目录而已。
2、hive的元数据信息实际上是存在于mysql中(通常的做法)
3、访问hive的数据是先访问元数据再根据元数据的地址信息来获取数据
外部表和内部表在建表上的区别就是external(代表的外部表),外部表存储的方式是固定的hdfs路径,表是通过映射的方式访问(load数据到表中),而内部表的访问方式就是一个表和一个hdfs对应。所以在删除外部表的时候,实际上是删除的外部表的元数据信息,但是数据在hdfs上丝毫未动,但是删除内部表,删除的是元数据和所有的hdfs上存储的数据。
对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)
业务实际运用:
1、在ods层的数据一般建设成外部表的形式,在日志产生的时候以文件的形式落到hdfs
上,然后再通过load语句将外部表和相关的hdfs路径关联起来,这样的话,多个表会以同样的方式来访问同一个hdfs的文件,也就实现了多个表共享数据。
-
- 优点:
-
-
- 不会误删数据,删除外部表只会删除表的元数据信息
-
-
-
- 多个部分公用同一份数据,效率提升、权限可以收敛
-
2、ods层下面之后的数据使用内部表的形式,一般一个业务线自我建设相关的数据,一个表对应一个hdfs路径就可以了,删表的时候可以把数据直接删掉,就会腾出hdfs空间
版权声明:本文为iilegend原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。