從Hive匯出資料到Oracle資料庫--Sqoop
阿新 • • 發佈:2018-12-02
首先解釋一下各行程式碼:
sqoop export # 指定要匯入到Oracle的那張表(通常與hive中的表同名) --table TABLE_NAME # host_ip:匯入oracle庫所在的ip:匯入的資料庫 --connect jdbc:oracle:thin:@HOST_IP:DATABASE_NAME # oracle使用者賬號 --username USERNAME # oracle使用者密碼 --password PASSWORD # hive表資料檔案在hdfs上的路徑 --export-dir /user/hive/warehouse/test.db/TABLE_NAME # 指定表的列名,必須指定 --columns ID,data_date,data_type,c1,c2,c3 # 列分隔符(根據hive的表結構定義指定分隔符) --input-fields-terminated-by '\001' # 行分隔符 --input-lines-terminated-by '\n' # 如果hive表中存在null欄位,則需要新增引數,否則無法匯入 --input-null-string '\\N' --input-null-non-string '\\N'
不知道表存在哪兒了: show create table table_name;
然後來個小栗子:
sqoop export \ --connect jdbc:oracle:thin:@172.12.12.102:orcl \ --username test \ --password kong \ --table table_abc \ --export-dir /user/hive/warehouse/bonc_gjj.db/table_abc \ # 注意,這一行columns不能有多餘的空格,否則會報錯。 --columns zzjgdm,jgmc,jglx,jjlx,frdbhfzr,xzqhdm,yzbm,tzgb,hbzl,jgdz,dh,yxqzfrq,zczj,njq0,fzrq,zzzt,pzwhhzch,bfdw,lastdate,id,dir_id,dir_ver,dir_ver_serail_num,addtime,updatetime,edituser_id,edituser,editdept_id,editdept,inserttype,is_valid,audit_status,pk_md5,sys_encrypt \ --input-fields-terminated-by '\001' \ --input-lines-terminated-by '\n' \ --input-null-string "\\\\N" \ --input-null-non-string "\\\\N"
最後,表那麼多,總不能一張一張手動匯入吧,那就來個指令碼吧。hh
指令碼奉上,簡單的要死,看看就會:
#!/bin/bash a=0; b=1; # ``這兩個反斜點,就是說裡面這是一個變數,我的have_data_table_name是一個檔案,裡面存的是一堆表名。 # cat file_name,自己試試什麼效果。for 開始迴圈表名。 for table_name in `cat ./have_data_table_name` do a=`expr $a + $b` echo "表名:$table_name,計數:$a"; echo "開始匯入資料!" # 這一行就厲害了,簡單來說就是取出一張表的所有列名,每個列名後加個逗號,然後去掉最後一個逗號,存在col這個變數中。 col=`hive -e "desc database_name.${table_name}"|sed '1d'|awk '{printf $1","}'|sed 's/,$/\n/g'` sqoop export \ --connect jdbc:oracle:thin:@172.12.12.102:1521:orcl \ --username test \ --password kong \ --table ${table_name} \ --export-dir /user/hive/warehouse/database_name.db/${table_name} \ --columns ${col} \ --input-fields-terminated-by '\001' \ --input-lines-terminated-by '\n' \ --input-null-string "\\\\N" \ --input-null-non-string "\\\\N" echo "第${a}張表匯入完畢!"; ---------------------
作者:Waterkong
來源:CSDN
原文:https://blog.csdn.net/waterkong/article/details/78708809