从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`doa=`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?
總結
以上是生活随笔為你收集整理的从Hive导出数据到Oracle数据库--Sqoop的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 银耳汤该怎么做才好吃?
- 下一篇: 人体关节的基本结构是什么??