1. 程式人生 > >往HIVE表中匯入匯出資料的幾種方式詳解

往HIVE表中匯入匯出資料的幾種方式詳解

一:往HIVE表中匯入匯出資料語法結構:[ ]帶括號的表示可選擇欄位LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTOTABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]各種引數說明:1-hive只對匯入該表中的資料按照自己的方式 處理,對於錯誤的資料不管,超出直接丟棄。2- Load 操作只是單純的複製/移動操作,將資料檔案移動到 Hive 表對應的位置所以也可以直接hadoop fs -put  ./1.txt   /user/hive/warehouse/web_log.db/staff/ 將資料直接匯入到hive表對應的位置。
hive對匯入的資料沒有查錯的功能,只是按自己的表字段進行匹配,格式匹配不了的預設用Null替代,
hive屬於讀時模式。3- LOCAL關鍵字,如果指定了 LOCAL, load 命令會去查詢本地檔案系統中的 filepath。如果沒有指定 LOCAL 關鍵字,則根據inpath中的uri查詢檔案4- OVERWRITE 關鍵字,如果使用了 OVERWRITE 關鍵字,則目標表(或者分割槽)中的內容會先被全部被刪除,然後再將 filepath 指向的檔案/目錄中的內容新增到表/分割槽中。如果目標表(分割槽)已經有一個檔案,並且檔名和 filepath 中的檔名衝突,那麼現有的檔案會被新檔案所替代。
1.往Hive表匯入資料方式      1、本地匯入(本地匯入以後1.txt檔案本地還有備份的)    load data local inpath 'local_path/file' into table 表名稱 ;     ex: load data  local inpath ./1.txt into table staff;2、HDFS匯入(匯入完以後hdfs上的1.txt檔案就不存在了)     load data inpath 'hdfs_path/file' into table 表名稱 ;     ex: load data inpath '/user/jerry.txt' into table jerry;//不能少了單引號
         load data  inpath'hdfs://hadoop102:8020/user/jerry.txt' into table jerry;3,覆蓋匯入:本地檔案匯入,hdfs檔案匯入加了overwrite引數而已        1. load data local inpath 'path/file' overwrite into table 表名稱 ;          ex: load data  local inpath ./1.txt  ovewrite  into table staff;        2.load data inpath 'path/file' overwrite into table 表名稱 ;          ex:load data inpath '/user/jerry.txt'  overwrite into table jerry;4、查詢匯入(其實就是建立新表)       create table track_log_bak as select * from db_web_data.track_log;5、insert查詢結果插入hive中(insert匯入必須基於別的表查詢匯入的)將查詢結果插入Hive表    語法結構(overwrite在前面,load的overwrite在後面)INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)]    select_statement1 FROM from_statement       覆蓋-overwrite-顯示指定-使用頻率高       追加-append-預設方式 (用into) insert  into table staff (這裡沒有as) select * from track_log;       insert overwrite table staff2 select id,name from staff where id<100;2.從Hive表匯出資料方式(也是查詢方式匯出,跟匯入區別insert後面一個是table,一個是directory)   1、hive中資料匯出到本地 標準語法INSERT OVERWRITE [LOCAL] DIRECTORY directory1 SELECT ... FROM ... 例如:insert overwrite local directory "/home/admin/Desktop/1/2"       row format delimited fields terminated by '\t'       select * from db_hive_demo.emp ;(row 這一行可以不加)溫馨提示:會遞迴建立目錄,一定要選擇資料夾,否則會覆蓋目錄,造成資料丟失2、insert查詢結果匯出到HDFS     insert overwrite  directory 'hdfs://hadoop102:8020/user/hive/warehouse/emp2/emp2'     select * from emp where empno >7800;3、Bash shell覆蓋追加匯出         例如:$ bin/hive -e "select * from staff;"  > /home/z/backup.log4、Sqoop把hive資料匯出到外部