1. 程式人生 > >使用 Hive裝載數據的幾種方式

使用 Hive裝載數據的幾種方式

rom art lec install 查詢語句 如果 mode lena 重寫

裝載數據 1、以LOAD的方式裝載數據 LOAD DATA [LOCAL] INPATH ‘filepath‘ [OVERWRITE] INTO TABLE tablename [PARTITION(partcol1=val1, partcol2=val2 ...)] 1) 使用LOCAL這個關鍵字,那麽這個路徑應該為本地文件系統路徑,是拷貝本地數據到位於HDFS上的目標位置,而不使用LOCAL這個關鍵字,那麽這個路徑應該為HDFS中的路徑,是把本身就在HDFS上的數據轉移到目標位置。 同時,因為文件是以這種方式移動的,Hive要求源文件和目標文件以及目錄應該在同一個文件系統中,不可以使用LOAD DATA 語句將數據從一個集群的HDFS中轉移到另一個集群的HDFS中。 2) 如果使用OVERWRITE 關鍵字,那麽目標文件夾中之前存在的數據將會刪除,如果沒有這個關鍵字,而目標文件夾中已經存在同名的文件時,會保留之前的文件並且會重新命名新文件為“之前的文件名_序列號”(這是在Hive v0.9.0版本中修復的,之前的版本是有同名的文件會被覆蓋重寫)。 3) 如果目標表是分區表那麽需要使用PARTITION 的子句,而且還必須為每個分區的鍵指定一個值。 4) 對於 INPATH 子句使用的文件路徑不可以包含任何文件夾。 5) Hive不會驗證裝載的數據和表的模式是否匹配,而會驗證文件格式是否和表結構定義的一致。如,表創建時定義的存儲格式是sequencefile,那麽轉載進去的文件也應該是sequencefile 格式的文件。 2、通過SELECT 語句向表中插入數據 insert overwrite table user_install_status2 partition (dt=‘20141117‘) select aid,pkgname,uptime,type,country,gpcategory from user_install_status where dt=‘20141117‘; 1)使用了OVERWRITE 關鍵字,因此之前分區的內容將會被覆蓋掉。而不使用OVERWRITE 或者使用INTO替換掉OVERWRITE 的話,那麽Hive將會以追加的方式寫入數據(這是在Hive v0.8.0版本才有的)。 2) 如果分區特別的多會多次掃描表進行插入數據,非常耗費資源。可以用下面的方式只掃描一次表就把所有的分區的數據進行插入。 FORM user_install_status insert overwrite table user_install_status2 partition (dt=‘20141117‘) select aid,pkgname,uptime,type,country,gpcategory where dt=‘20141117‘ insert overwrite table user_install_status2 partition (dt=‘20141118‘) select aid,pkgname,uptime,type,country,gpcategory where dt=‘20141118‘ insert overwrite table user_install_status2 partition (dt=‘20141119‘) select aid,pkgname,uptime,type,country,gpcategory where dt=‘20141119‘ insert overwrite table user_install_status2 partition (dt=‘20141120‘) select aid,pkgname,uptime,type,country,gpcategory where dt=‘20141120‘; 3、動態分區插入 insert overwrite table user_install_status2 partition (dt) select ....., dt from user_install_status ; 1)Hive 是根據SELECT 語句的最後一列來確定分區字段dt 的值。 2)動態分區默認情況下沒有開啟,要通過設置如下兩個參數來開啟 set hive.exec.dynamic.partition=true? 開啟動態分區 set hive.exec.dynamic.partition.mode=nonstrict?設為非嚴格模式執行,嚴格模式要求至少一個分區字段是靜態的 4、單個查詢語句中創建表並加載數據 create table user_install_status3 as select aid, pkgname, uptime, type, country, gpcategory from user_install_status where dt=‘20141228‘; 1) 這種做法往往是從一個大的數據集中抽取一個小的數據集。 2)這種做法不能用於外部表。

使用 Hive裝載數據的幾種方式