hive表分為兩類,即內部表和外部表。
內部表(managed table)
所謂內部表(managed table)即hive管理的表,hive內部表的管理既包含邏輯以及語法上的,也包含實際物理意義上的,即建立hive內部表時,資料將真實存在於表所在的目錄內,刪除內部表時,物理資料和檔案也一併刪除。
外部表(external table)
外部表(external table)則不然,其管理僅僅是在邏輯和語法意義上的,即新建表僅僅是指向乙個外部目錄而已。同樣,刪除時也並不物理刪除外部目錄,而僅僅是將引用和定義刪除。
考慮下面的語句:
create table my_managed_table(col1 string)
load data inpath '/user/root/test_data.txt'
in to table my_managed_table
上述語句會將hdfs://user/root/data.txt移動到hive的對應目錄hdfs://user/hive/warehouse/managed_table。但是載入資料的速度非常快,因為hive只是把資料移動到對應的目錄,不會對資料是否符合定義的schema做校驗,這個工作通常在讀取的時候進行(即為schema on read)。同時,my_managed_table使用drop語句刪除後,其資料和表的元資料都被刪除,不再存在,這就是hive managed的意思:
drop table my_managed_table;
外部表則不一樣,資料的建立和刪除完全由自己控制,hive不管理這些資料。資料的位置在建立時指定:
create external table externale_table(dummy string)
location '/user/root/externale_table'
load data inpath '/user/root/data.txt'
in to table externale_table
指定external關鍵字後,hive不會把資料移動到warehouse目錄中。事實上,hive甚至不會校驗外部表的目錄是否存在。這使得我們可以在建立表之後再建立資料。當刪除外部表時,hive只刪除元資料,而不會刪除外部實際物理檔案。
選擇內部表還是外部表?
大多數情況下,這兩者的區別不是很明顯。如果資料的所有處理都在hive中進行,那麼更傾向於選擇內部表。但是如果hive和其他工具針對相同的資料集做處理,那麼外部表更合適。一種常見的模式是使用外部表訪問儲存的hdfs(通常由其他工具建立)中的初始資料,然後使用hive轉換資料並將其結果放在內部表中。相反,外部表也可以用於將hive的處理結果匯出供其他應用使用。使用外部表的另一種場景是針對乙個資料集,關聯多個schema。
hive外部表和內部表
1.內部表指hive建立並通過load data inpath進資料庫的表,這種表可以理解為資料和表結構都儲存在一起的資料表。當你通過drop table table name 刪除元資料中表結構的同時,表中的資料也同樣會從hdfs中被刪除。sql view plain copy create ta...
Hive內部表和外部表
總結一下hive的內部表和外部表以及兩者的區別。平時建立的普通表為內部表 create table test internal id string comment id name string comment 名字 comment 測試內部表 row format delimited fields ...
Hive 外部表和內部表
外部表說明 外部表因為是指定其他的hdfs路徑的資料載入到表當中來,所以hive表會認為自己不完全獨佔這份資料,所以刪除hive表的時候,資料仍然存放在hdfs當中,不會刪掉 管理表和外部表的使用場景 操作案例 分別建立老師與學生表外部表,並向表中載入資料 建立老師表 create external...