[英]Does DROP PARTITION delete data from external table in HIVE?
HIVE 中的外部表按年、月和日進行分區。
那么以下查詢是否會從此查詢中引用的特定分區的外部表中刪除數據?:-
ALTER TABLE MyTable DROP IF EXISTS PARTITION(year=2016,month=7,day=11);
分區方案不是數據。 分區方案是存儲在元數據中的表 DDL 的一部分(簡單地說:分區鍵值 + 存儲數據文件的位置)。
數據本身存儲在分區位置(文件夾)中的文件中。 如果刪除外部表的分區,該位置保持不變,但作為分區卸載(刪除有關此分區的元數據)。 您可以卸載幾個版本的分區位置(例如以前的版本)。
您可以刪除分區並將另一個位置掛載為分區( alter table add partition )或更改現有分區位置。 同時刪除外部表不要刪除其中包含文件的表/分區文件夾。 稍后您可以在此位置的頂部創建表。
查看此答案以更好地理解外部表/分區概念:可以在 HDFS 的同一位置上創建多個表(同時管理和外部)。
沒有外部表只有將被刪除的引用,實際文件仍將保留在 location 。
外部表數據文件不歸表所有,也不移動到 hive 倉庫目錄
只有 PARTITION meta 會從 hive Metastore 表中刪除。
內表與外表的區別:
對於外部表 -
外部表將文件存儲在 HDFS 服務器上,但表並未完全鏈接到源文件。
如果刪除外部表,該文件仍保留在 HDFS 服務器上。
例如,如果您使用 HIVE-QL 在 HIVE 中創建一個名為“table_test”的外部表並將該表鏈接到文件“file”,那么從 HIVE 中刪除“table_test”不會從 HDFS 中刪除“file”。
任何有權訪問 HDFS 文件結構的人都可以訪問外部表文件,因此需要在 HDFS 文件/文件夾級別管理安全性。
元數據在主節點上維護,從 HIVE 中刪除外部表,只刪除元數據而不刪除數據/文件。
對於內部表-
存儲在基於 hive.metastore.warehouse.dir 設置的目錄中,默認情況下內部表存儲在以下目錄“/user/hive/warehouse”中,您可以通過更新配置文件中的位置來更改它。 刪除表會分別從主節點和 HDFS 中刪除元數據和數據。 內部表文件安全僅通過 HIVE 控制。 安全需要在 HIVE 內進行管理,可能在模式級別(取決於組織到組織)。
Hive 可能有內部或外部表,這是一個影響數據加載、控制和管理方式的選擇。
在以下情況下使用 EXTERNAL 表:
數據也在 Hive 之外使用。 例如,數據文件由不鎖定文件的現有程序讀取和處理。 即使在 DROP TABLE 之后,數據也需要保留在底層位置。 如果您將多個模式(表或視圖)指向單個數據集,或者您正在遍歷各種可能的模式,則這適用。 Hive 不應擁有數據和控制設置、目錄等,您可能有另一個程序或進程來執行這些操作。 您不是基於現有表 (AS SELECT) 創建表。
在以下情況下使用內部表:
數據是臨時的。 您希望 Hive 完全管理表和數據的生命周期。
注意:如果您要查看數據庫,請使用元表(配置的詳細信息)
|BUCKETING_COLS |
| COLUMNS |
| DBS |
| NUCLEUS_TABLES |
| PARTITIONS |
| PARTITION_KEYS |
| PARTITION_KEY_VALS |
| PARTITION_PARAMS |
| SDS |
| SD_PARAMS |
| SEQUENCE_TABLE |
| SERDES |
| SERDE_PARAMS |
| SORT_COLS |
| TABLE_PARAMS |
| TBLS |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.