hive中內部表及外部表特性差異

2021-10-24 04:41:29 字數 1707 閱讀 5720

關鍵點:

archive/unarchive/truncate/merge/concatenate命令只能在內部表上進行使用;

drop操作將會刪除內部表的元資料及資料資訊,而對於外部表則僅僅刪除元資料資訊;

acid的事務特性僅僅適用於內部表; 查詢結果快取只適用於內部表;

外部表的表約束只支援rely操作;

一些物化檢視的特性只適用於內部表;

hive中表的兩種基本型別

1)、內部表(managed)--預設

2)、外部表(external)

簡介

本文將介紹內部表及外部表的一些差異點,不過hive中內部表與外部表根本的差異在於表是否擁有自己的資料。

這意味著表資料以及表屬性只能通過hive的命令進行更改,而實際上因為資料檔案儲存在檔案系統上,任何有許可權的人都有可能繞過hive對其作出更改,如果更改操作違反了hive對檔案要求的不變性及hive對檔案格式和內容的期望,則最終hive返回的結果很有可能是使用者所不希望看到的;

內部表的另乙個特性是資料都追加到hive實體中,舉例來說,每當改變hive實體資料時,其對應的資料也將發生改變。這與傳統的rdbms非常類似--更改資料庫資料都是基於sql的訪問許可權來操作而非直接修改資料檔案;

而對於外部表,hive認為其不管理資料;

使用上可以通過使用命令檢視表的詳細資訊:

hive> desc formatted table_name;
其中一項table type指明了當前表型別是managed_table還是external_table;

特性比較

內部表與外部表存在以下但不完全的特性差異:

archive/unarchive/truncate/merge/concatenate命令只能在內部表上進行使用;

drop操作將會刪除內部表的元資料及資料資訊,而對於外部表則僅僅刪除元資料資訊;

acid的事務特性僅僅適用於內部表;

查詢結果快取只適用於內部表;

外部表的表約束只支援rely操作;

一些物化檢視的特性只適用於內部表;

內部表資訊儲存在由hive.metastore.warehouse.dir指定的屬性目錄下,預設的檔案路徑類似於/user/hive/warehouse/databasename.db/tablename/;

預設的存放路徑可以在建立表時顯式指定覆蓋;

針對於內部表或分割槽表,當進行drop操作時,其表中的資料以及表的元資料資訊均會被刪除;

如果操作未指定為purge,則資料將會被移動到**目錄;

當使用場景是希望hive來管理表的生命週期時或者是生成臨時表時則應該使用內部表進行儲存;

外部表(external table)

乙個外部表僅僅描述和記錄了外部檔案的元資料,其關聯的檔案同樣可以由hive外部的程序訪問及管理;

外部表可以訪問由本地檔案系統或者hdfs管理的檔案資料;

如果外部表的結構或者分割槽結構發生變更,可以通過使用命令對外部表的元資料進行更新:

hive> msck repair table tablename
使用外部表的另乙個原因是檔案已經存在或存在遠端機器上,並且希望該檔案在表結構刪除的情況下資料依然能夠得以保留;

Hive內部表 外部表

內部表 外部表 未被external修飾的是內部表 managed table 被external修飾的為外部表 external table 區別 內部表資料由hive自身管理,外部表資料由hdfs管理 內部表資料儲存的位置是hive.metastore.warehouse.dir 預設 user...

hive外部表和內部表

1.內部表指hive建立並通過load data inpath進資料庫的表,這種表可以理解為資料和表結構都儲存在一起的資料表。當你通過drop table table name 刪除元資料中表結構的同時,表中的資料也同樣會從hdfs中被刪除。sql view plain copy create ta...

Hive內部表 外部表區別

hive內部表 外部表區別自不用說,可實際用的時候還是要小心。1.內部表 sql view plain copy print create table tt name string age string location input table data 此時,會在hdfs上新建乙個tt表的資料存放...