溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hive如何實現(xiàn)數(shù)據(jù)裝載

發(fā)布時間:2021-12-10 09:26:17 來源:億速云 閱讀:179 作者:小新 欄目:大數(shù)據(jù)

這篇文章將為大家詳細講解有關Hive如何實現(xiàn)數(shù)據(jù)裝載,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

既然Hive沒有行級別的數(shù)據(jù)插入、數(shù)據(jù)更新和刪除操作,那么往表中裝載數(shù)據(jù)的唯一途徑就是使用一種“大量”的數(shù)據(jù)裝載操作?;蛘咄ㄟ^其他方式僅僅將文件寫入到正確的目錄下。

第一種方式之前介紹過了,LOAD,一條命令一筆帶過

LOAD DATA LOCAL INPATH /data/ OVERWRITE INTO TABLE ods_login PARTITION (dt='2020-03-01');

第二種方式通過查詢語句向表中插入數(shù)據(jù)

INSERT語句允許用戶通過查詢語句向目標表中插入數(shù)據(jù)。依舊使用前章中表 ods_login作為例子,假設我們的ods_login已經(jīng)通過load有數(shù)據(jù)了,數(shù)倉的下一層是dwd,那么我們需要將數(shù)據(jù)從ods_login寫入到dwd_login,像這樣(省略掉數(shù)據(jù)清洗邏輯)

INSERT OVERWRITE TABLE dwd_loginPARTITION (dt='20200302')SELECT * FROM ods_loginWHERE dt='20200302'

這里使用了 OVERWRITE關鍵字,因此之前分區(qū)中的內(nèi)容(如果是非分區(qū)表,就是之前表中的內(nèi)容)將會被覆蓋掉。這里如果沒有使用OVERWRITE關鍵字或者使用INTO關鍵字替換掉它的話,那么Hive 將會以追加的方式寫入數(shù)據(jù)而不會覆蓋掉之前已經(jīng)存在的內(nèi)容。

單個査詢語句中創(chuàng)建表并加載數(shù)據(jù)

用戶同樣可以在一個語句中完成創(chuàng)建表并將查詢結果載入這個表的操作:

CREATE TABLE dwd_loginAS SELECT name, salary, addressFROM ods_loginWHERE date='20200302'

這張表只含有dwd_login表中name、salary和address3個字 段的信息。新表的模式是根據(jù)SELECT語句來生成的。

使用這個功能的常見情況是從一個大的寬表中選取部分需要的數(shù)據(jù)集。

這個功能不能用于外部表??梢曰叵胂率褂肁LTER TABLE語句可以為外部表“引用” 到一個分區(qū),這里本身沒有進行數(shù)據(jù)“裝載”,而是將元數(shù)據(jù)中指定一個指向數(shù)據(jù)的 路徑。

然而,如果表ods_login非常大,而且需要從這個表中不同字段的數(shù)據(jù)做不同的處理,然后寫入不同的表中的話,就沒有那么簡單了。好在 Hive提供了另一種INSERT語法, 即只掃描一次輸入數(shù)據(jù),然后按多種方式進行劃分。如下:

FROM ods_loginINSERT OVERWRITE TABLE dwd_loginPARTITION (dt='20200302')SELECT * WHERE event=‘login’ and dt=‘20200302’INSERT OVERWRITE TABLE dwd_loginPARTITION (dt='20200303')SELECT * WHERE event=‘login’ and dt=‘20200303’INSERT OVERWRITE TABLE dwd_loginPARTITION (dt='20200304')SELECT * WHERE event=‘login’ and dt=‘2020030

 

從ods_login表中讀取的每條 記錄都會經(jīng)過一條SELECT ... WHERE ...句子進行判斷。這些句子都是獨立進行判斷的,不是 IF...THEN...ELSE...結構

事實上,通過使用這個結構,源表中的某些數(shù)據(jù)可以被寫入目標表的多個分區(qū)中或者不被寫入任一個分區(qū)中。

如果某條記錄是滿足某個SELECT ... WHERE ...語句的話,那么這條記錄就會被寫入 到指定的表和分區(qū)中。簡單明了地說,每個INSERT子句,只要有需要,都可以插入 到不同的表中,而那些目標表可以是分區(qū)表也可以是非分區(qū)表。

因此,輸入的某些數(shù)據(jù)可能輸出到多個輸出位置而其他一些數(shù)據(jù)可能就被刪除掉了。當然,這里可以混合使用INSERT OVERWRITE句式和INSERT INTO句式。

關于“Hive如何實現(xiàn)數(shù)據(jù)裝載”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI