1. 程式人生 > >從Hive匯出資料到Oracle資料庫--Sqoop

從Hive匯出資料到Oracle資料庫--Sqoop


首先解釋一下各行程式碼:

 

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