2012-07-12 16 views
1

我正在使用蜂巢工作。當我今天創造了一些外部表,我忘了輸入關鍵字EXTERNAL,以及HiveQL是這樣的:創建沒有EXTERNAL關鍵字的外部表?

CREATE TABLE year_2012_main (
    some BIGINT, 
    fields BIGINT, 
    should BIGINT, 
    beee BIGINT, 
    here STRING, 
    buttt STRING, 
    Iveee STRING, 
    decide STRING, 
    tohide STRING, 
    them BIGINT) 
    ROW FORMAT DELIMITED 
    FIELDS TERMINATED BY ',' 
    COLLECTION ITEMS TERMINATED BY ' ' 
    MAP KEYS TERMINATED BY ':' 
    STORED AS TEXTFILE location '/data/content/year_2012_main'; 

然後我試圖select count (*) from year_2012_main;,而且運作良好。

所以,出於好奇,有或沒有EXTERNAL有什麼區別?

回答

0

非外部的Hive表稱爲託管表。 Hive中的外部表和託管表之間的主要區別之一是,當外部表被刪除時,與其相關聯的數據(在您的案例/ data/content/year_2012_main中)不會被刪除,只有元數據(數字列,列的類型,終止符等)從Hive Metastore中刪除。當託管表被刪除時,元數據和數據都會丟失。到目前爲止,我總是首選使表在外部,因爲如果我的Hive表的模式發生變化,我可以刪除外部表,並使用新模式在相同的HDFS數據上重新創建另一個外部表。然而,現在可以通過ALTER TABLE或類似的命令對大多數(如果不是全部的話)架構變化進行修改,所以我建議/優先使用外部表格而不是託管的表格,這可能比現在更受關注。

您可以瞭解更多關於術語here的信息。

+0

是的我知道外部表和非外部表之間的差異。但是我使用提到的HiveQL創建了表,然後刪除它們,但數據文件沒有被刪除。 – Rufus 2012-07-15 15:31:45