譯者注:
這篇文章中主要介紹了Hive中的Managed Table和External Table在存儲文件上的區(qū)別.更多的區(qū)別,請自行搜索.
在這篇文章中匙瘪,我們主要介紹題目中所說的那兩種Table的區(qū)別纹蝴,以及怎樣創(chuàng)建這兩種類型的表和什么時候我們會用到它們.
Hive有兩種類型的表:
- Managed Table
- External Table
下面我們詳細介紹這兩種表.
Managed Table
這種表也被稱作Internal Table.這是Hive中的默認的類型.如果你在創(chuàng)建表的時候沒有指明Managed或者External,那么默認就會給你創(chuàng)建Managed Table.
Managed Table的數據,會存放在HDFS中的特定的位置中,通常是/user/hduser/hive/warehouse.當然宾茂,也不一定,看你的Hive的配置文件中是如何配置的.
我們可以使用下面的命令來創(chuàng)建一個Managed Table:
![](https://i2.wp.com/s3.amazonaws.com/acadgildsite/wordpress_images/bigdatadeveloper/Managed+and+External+tables+in+hive/Create_manage_table.png?resize=768,59&ssl=1)
我們已經成功創(chuàng)建一個Managed Table了拴还,我們使用下面的命令來查看:
![](https://i2.wp.com/s3.amazonaws.com/acadgildsite/wordpress_images/bigdatadeveloper/Managed+and+External+tables+in+hive/info_managed_table.png?resize=763,577&ssl=1)
在上圖中跨晴,我們可以看到,Table Type那里是Managed Table,這就表示我們確實創(chuàng)建了一個Managed類型的Table.
我們使用下面的命令片林,從本地文件系統(tǒng)中加載一些數據到這張表中:
![](https://s3.amazonaws.com/acadgildsite/wordpress_images/bigdatadeveloper/Managed+and+External+tables+in+hive/load_data_managed_table.png)
通過下面的命令端盆,查看這張表在HDFS中的位置:
![](https://i1.wp.com/s3.amazonaws.com/acadgildsite/wordpress_images/bigdatadeveloper/Managed+and+External+tables+in+hive/check_managed_data.png?resize=768,64&ssl=1)
我們可以從上圖看到該表在HDFS中的位置.
下面我們刪除這張表:
![](https://i2.wp.com/s3.amazonaws.com/acadgildsite/wordpress_images/bigdatadeveloper/Managed+and+External+tables+in+hive/drop_managed_table.png?resize=245,74&ssl=1)
我們成功地刪除了這張表.
我們再查看一下這種表在HDFS中是否存在:
![](https://i0.wp.com/s3.amazonaws.com/acadgildsite/wordpress_images/bigdatadeveloper/Managed+and+External+tables+in+hive/check_data_after_delete_managed.png?resize=768,55&ssl=1)
在上圖中,我們可以看到拇厢,表和它的內容爱谁,都從HDFS中刪除了.
External Table
External Table特別適用于想要在Hive之外使用表的數據的情況.當你刪除External Table時,只是刪除了表的元數據孝偎,它的數據并沒有被刪除.
我們創(chuàng)建一張External Table,并查看一下它的結構:
![](https://i2.wp.com/s3.amazonaws.com/acadgildsite/wordpress_images/bigdatadeveloper/Managed+and+External+tables+in+hive/create_external_table.png?resize=768,522&ssl=1)
從上圖中访敌,我們可以看到,表的類型是"External Table".
現在我們同樣從文件系統(tǒng)中加載一些數據到這張表中:
![](https://s3.amazonaws.com/acadgildsite/wordpress_images/bigdatadeveloper/Managed+and+External+tables+in+hive/load_data_external_table.png)
然后衣盾,我們可以通過下面的命令查看它的位置:
![](https://i1.wp.com/s3.amazonaws.com/acadgildsite/wordpress_images/bigdatadeveloper/Managed+and+External+tables+in+hive/check_managed_data.png?resize=768,64&ssl=1)
刪除它:
![](https://i2.wp.com/s3.amazonaws.com/acadgildsite/wordpress_images/bigdatadeveloper/Managed+and+External+tables+in+hive/drop_external_table.png?resize=245,74&ssl=1)
再檢查一下:
![](https://i0.wp.com/s3.amazonaws.com/acadgildsite/wordpress_images/bigdatadeveloper/Managed+and+External+tables+in+hive/check-data_after_delete_external.png?resize=768,72&ssl=1)
你可以看到寺旺,即使我們刪除了表爷抓,它的數據仍然存在.
什么時候使用哪種表?
Managed Table
- 數據是臨時數據
- 外部的程序無法訪問這些數據
- 數據會隨著表的刪除而刪除
External Table
- 數據可以被外部程序訪問
- 你不能基于已經存在的表再創(chuàng)建表
- 表被刪除時,數據不會被刪除