這篇文章主要為大家展示了“Hive如何創建外部表”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Hive如何創建外部表”這篇文章吧。
別的先不說,開門見山說說內部表的特點:
Hive 創建內部表時,會將數據移動到數據倉庫指向的路徑;
Hive 創建外部表,僅記錄數據所在的路徑,不對數據的位置做任何改變;
在刪除表的時候,內部表的元數據和數據會被一起刪除,而外部表只刪除元數據,不刪除數據。這樣外部表相對來說更加安全些,數據組織也更加靈活,方便共享源數據。
傳統數據庫對表數據驗證是schema on write(寫時模式),而 Hive 在load時是不檢查數據是否符合schema的,hive 遵循的是schema on read(讀時模式),只有在讀的時候hive才檢查、解析具體的數據字段、schema;所以在這樣的設計下,Hive支持創建外部表也變得理所應當,我們來看下如何創建一個外部表。
CREATE EXTERNAL TABLE table_name(id STRING, name STRING) ROW FORMAT DELIMITEDLOCATION '/data/my_data.txt';
關鍵字EXTENAL告訴Hive這個表是外部的,而后面的LOCATION...子句則用于告訴Hive數據位于哪個路徑下。
然而,我們需要清楚的重要的一點是管理表和外部表之間的差異要比剛開始所看到的小得多。即使對于管理表,用戶也是可以知道數據是位于哪個路徑下的,因此用戶也是可以使用其他工具(例如hadoop的hdfs dfs命令等)來修改甚至刪除管理表所在的路徑目錄下的數據的。
可能從嚴格意義上來說,Hive是管理著這些目錄和文件,但是其并非具有對它們的完全控制權限。Hive實際上對于所存儲的文件的完整性以及數據內容是否和表模式相一致并沒有支配能力,甚至管理表都沒有給用戶提供這些管理能力。
盡管如此,好的軟件設計的一般原則是表達意圖。如果數據會被多個工具共享,那么可以創建一個外部表,來明確對數據的所有權。
用戶可以在DESCRIBE EXTENDED tablename 語句的輸出中查看到表是否是管理表或外部表。在末尾的詳細表信息輸出中,對于管理表,用戶可以看到如下信息:
... tableType:MANAGED_TABLE)
對于外部表,用戶可以查看到如下信息:
... tableType:EXTERNAL_TABLE)
對于管理表,用戶還可以對一張存在的表進行表結構復制(而不會復制數據):
CREATE EXTERNAL TABLE IF NOT EXISTS ods.ods_table_nameLIKE mydb.employeesLOCATION '/path/to/data';
這里,如果語句中省略掉EXTERNAL關鍵字而且源表是外部表的話,那么生成的新表也將是外部表。如果語句中省略掉EXTERNAL關鍵字而且源表是內部表的話,那么生成的新表也將是內部表。
但是,如果語句中包含有EXTERNAL關鍵字而且源表是內部表的話,那么生成的新表將是外部表。即使在這種場景下,LOCATION子句同樣是可選的。
以上是“Hive如何創建外部表”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。