[Hadoop] Hive 内部表与外部表

Hive中表与外部表

相同:

    1. 它们都是用mysql/derby作为元数据存储,在元数据的组织上是相同的,都是用hdfs做实际的数据存储,本身没有数据存储的功能,需要借助hdfs;

    2. 它们都可以在建表的时候指定一个指向HDFS文件夹的路径,如果不指定这个路径,那么默认的hive表中的数据会保存在HDFS上/user/hive/warehouse上一个和表名称一样的文件夹中;

    3. 它们创建成功后,通过load data ipath '/path/to/xxx' overwrite into table tb_name的方式导入hdfs上的数据到hive数据表中时,被导入的数据会被杀出,在hdfs中,相当于移动文件;

    4.内部表也可以指定hdfs上已经存在的一个目录,这样表已创建就有了数据,这样和在外部表表现差不多,只是在删除表的时候会有差异。


区别:

1. 建表时外部表要加上external关键字

2. 数据导入

内部表:导入数据到内部表,数据移动到自己的数据仓库目录下,原始目录下数据已经没有了;

外部表:在导入数据到外部表,数据并没有移动到自己的数据仓库目录下,表中的数据不由Hive自己管理;

2. 删除

内部表:Hive会把属于表的元数据和数据(hdfs上对应的目录)全部删掉;

外部表:Hive仅删除外部表的元数据(schema),数据(hdfs上对应的目录)不删除。可以理解为外部表只是建立了一个元数据到hdfs的一个链接,删除时只是将这个链接断开,并不删除hdfs文件。



内部表与外部表选择


参考:https://blog.csdn.net/bbbeoy/article/details/62233125

https://blog.csdn.net/yeruby/article/details/23033273




猜你喜欢

转载自blog.csdn.net/wawa8899/article/details/80329319