您好,登錄后才能下訂單哦!
這篇文章主要介紹Hive如何創建內部表 ,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
之前說的是外部表,當把EXTERNAL關鍵字去掉的時候就是內部表了。為什么叫內部表,因為這種表,Hive會(或多或少地)控制著數據的生命周期。
如果你熟悉Hive那你一定知道,Hive默認情況下會將這些表的數據存儲在由配置項 hive.metastore.warehouse.dir (例如,/user/hive/warehouse)所定義的目錄的子目錄下。
當我們刪除一個內部表時,Hive也會刪除這個表中數據。相應的,內部表不方便和其他工作共享數據。例如,有一份數據正在被其他程序使用,同時我們還想使用Hive在這份數據上執行一些查詢,可是并沒有給予Hive對數據的所有權,我們可以創建一個外部表指向這份數據,而并不需要對其具有所有權。那內部表如果想要這份數據怎么辦呢,用LOAD。
LOAD DATA LOCAL INPATH /data/ OVERWRITE INTO TABLE ods_login PARTITION (dt='2020-03-01');
OVERWRITE:覆蓋
如果用戶指定了 OVERWRITE關鍵字,那么目標文件夾中之前存在的數據將會被先刪 除掉。如果沒有這個關鍵字,僅僅會把新增的文件增加到目標文件夾中而不會刪除之 前的數據。如果目標文件夾中已經存在和裝載的文件同名的文件,那么舊的同 名文件將會被覆蓋重寫。
PARTITION:導入分區
如果分區目錄不存在的話,這個命令會先創建分區目錄,然后再將數據拷貝到該目錄下。如果目標表是非分區表,那么語句中應該省略PARTITION子句。
通常情況下指定的路徑應該是一個目錄,而不是單個獨立的文件。Hive會將所有文件 都拷貝到這個目錄中。這使得用戶將更方便地組織數據到多文件中,同時,在不修改 Hive腳本的前提下修改文件命名規則。不管怎么樣,文件都會被拷貝到目標表路徑下 而且文件名會保持不變。
如果使用了 LOCAL這個關鍵字,那么這個路徑應該為本地文件系統路徑。數據將會被 拷貝到目標位置。如果省略掉LOCAL關鍵字,那么這個路徑應該是HDFS的路徑。這種情況下,數據是從這個路徑轉移到目標位置的。
之前提到過Hive的schema on read,這種模式的優勢是load data 非常迅速,因為它不需要讀取數據進行解析,僅僅進行文件的復制或者移動。Mysql的寫時模式的優勢是提升了查詢性能,因為預先解析之后可以對列建立索引,并壓縮,但這樣也會花費要多的加載時間。
需要注意的是:
如果加載的文件在HDFS上,此文件會被移動到表路徑中;
如果加載的文件在本地,此文件會被復制到HDFS的表路徑中;
會為每一個待導入的文件,啟動一個MR任務進行導入。
如同內部表一樣,外部表在創建表時也需要指定數據表所在的數據文件的路徑——以下簡稱為表路徑。如果沒有指定,Hive會自動分配一個。自動分配的目錄是hive主目錄下的以表名命名目錄;
如果創建外部表時,指定表的數據存儲目錄。Hive會將此目錄下已有的所有文件作為表的數據文件,在查詢時進行解析。此時,Hive仍會在hive的目錄下創建以表名命名的目錄,但目錄內的內容為空。
以上是“Hive如何創建內部表 ”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。