1. 程式人生 > >sqoop指令碼(hive到Oracle)

sqoop指令碼(hive到Oracle)

#!/bin/sh
source ExitCodeCheck.sh


[email protected]


getparam(){
arg=$1
echo $opts |xargs -n1 |cut -b 2- |awk -F'=' '{if($1=="'"$arg"'") print $2}'
}


IncStart=`getparam inc_start`
IncEnd=`getparam inc_end`
oracle_connection=`getparam jdbc_str`
oracle_username=`getparam db_user`
oracle_password=`getparam db_psw`
dataName=`getparam db_sid`
queueName=`getparam hdp_queue`
hdfshostname=`getparam hdfs_host`


IncStartYear=`echo ${IncStart:0:4}`;
IncStartMonth=`echo ${IncStart:4:2}`;
IncStartDay=`echo ${IncStart:6:2}`;
IncStartAll=${IncStartYear}"-"${IncStartMonth}"-"${IncStartDay}" 00:00:00.0";


IncStartAllFormat=${IncStartYear}"-"${IncStartMonth}"-"${IncStartDay};


IncEndYear=`echo ${IncEnd:0:4}`;
IncEndMonth=`echo ${IncEnd:4:2}`;
IncEndDay=`echo ${IncEnd:6:2}`;
IncEndAll=${IncEndYear}"-"${IncEndMonth}"-"${IncEndDay}" 00:00:00.0";


twoDayAgo=`date -d "$IncStart 2 days ago  " +%Y%m%d  `;
twoDayAgoYear=`echo ${twoDayAgo:0:4}`;
twoDayAgoMonth=`echo ${twoDayAgo:4:2}`;
twoDayAgoDay=`echo ${twoDayAgo:6:2}`;
twoDayAgoAll=${twoDayAgoYear}"-"${twoDayAgoMonth}"-"${twoDayAgoDay}" 00:00:00.0";
twoDayAgoAllFormat=${twoDayAgoYear}"-"${twoDayAgoMonth}"-"${twoDayAgoDay};


job_name=$0


#需要匯出的資料oracle表名
export_table_name=NCHRMS_ORGANIZATION_INTF;


#需要匯出到oracle的資料的臨時檔名
sqoop_export_data_filename=${export_table_name};


#需要匯出的資料oracle列名
export_table_columns=ORG_ID,PARENT_ORG_ID,ORG_CODE,ORG_EN_NAME,ORG_CH_NAME,ORG_TAG,EFFECTIVE_DATE,LAPSED_DATE,PLACE_CODE,ORG_BIZ_CODE,IS_ACTIVE,ORG_LEVEL,ORG_SERIES,CREATED_BY,CREATED_DATE,UPDATED_BY,UPDATED_DATE


#需要匯出到oracle的資料的臨時檔案目錄
sqoop_export_data_dir=/apps-data/hduser0101/sx_360_safe/export/${sqoop_export_data_filename};


 


hadoop dfs -rmr ${sqoop_export_data_dir};


#建立用於匯出到oracle的臨時資料
hive -v -e "set mapred.job.queue.name=${queueName}; 
set mapred.job.name=${job_name}_1;
use SX_360_SAFE;
insert overwrite directory '${sqoop_export_data_dir}' 
select 
ORG_ID,
PARENT_ORG_ID,
ORG_CODE,
ORG_EN_NAME,
ORG_CH_NAME,
ORG_TAG,
EFFECTIVE_DATE,
LAPSED_DATE,
PLACE_CODE,
ORG_BIZ_CODE,
IS_ACTIVE,
ORG_LEVEL,
ORG_SERIES,
CREATED_BY,
CREATED_DATE,
UPDATED_BY,
UPDATED_DATE
from lnc_cris_safe.nchrms_organization_intf ;";
exitCodeCheck $?










#先刪除目的資料庫的資料2天前數
sqoop eval -Dmapred.job.queue.name=${queueName} \
--connect ${oracle_connection} \
--username ${oracle_username} \
--password ${oracle_password} \
--verbose \
--query  "delete from ${export_table_name}";
exitCodeCheck $?


#先刪除目的資料庫的資料,支援二次執行
sqoop eval -Dmapred.job.queue.name=${queueName} \
--connect ${oracle_connection} \
--username ${oracle_username} \
--password ${oracle_password} \
--verbose \
--query  "delete from ${export_table_name}";
exitCodeCheck $?


#再匯出資料
sqoop export -D mapred.job.name=${job_name}_2 -D sqoop.export.statements.per.transaction=4500 -D mapreduce.map.tasks=1 -D mapred.map.max.attempts=1 -D mapred.reduce.max.attempts=1 -D mapreduce.map.maxattempts=1 -D mapreduce.reduce.maxattempts=1 -D mapred.job.queue.name=${queueName} \
--connect ${oracle_connection} \
--username ${oracle_username} \
--password ${oracle_password} \
--export-dir ${sqoop_export_data_dir} \
--verbose \
--num-mappers 1 \
--table ${export_table_name} \
--columns ${export_table_columns} \
--input-fields-terminated-by '\001'  \
--input-lines-terminated-by '\n'  \
--input-null-string '\\N'  \
--input-null-non-string '\\N';

exitCodeCheck $?

指令碼執行命令:

./sqoop_export_liferpt_nchrms_organization_intf.sh  -jdbc_str=jdbc:oracle:thin:@d0lifrt.dbdev.paic.com.cn:1526:d0lifrt -db_user=LOLAPDATA -db_psw=patst2012 -db_sid=LUSH0 -hdp_queue=root.queue_0101_01 -hdfs_host=hdfs://hdp-hdfs01







相關推薦

sqoop指令碼hive到Oracle

#!/bin/sh source ExitCodeCheck.sh [email protected] getparam(){ arg=$1 echo $opts |xargs -n1 |cut -b 2- |awk -F'=' '{if($1=="'"$arg"

自動化運維:3寫一個簡單的Shell指令碼案例

一、需求 1、test.sh 指令碼執行時候需要新增引數才能執行 引數和功能詳情如下: 引數 執行效果 start 啟動中... stop 關閉中... restart 重啟中... * 指令碼幫

如何編寫一個優雅的Shell指令碼

如何編寫一個優雅的Shell指令碼(三) 簡介 awk語法 awk內建變數 awk內建函式 awk實踐 awk檔案關聯 awk檔案拆分 總結 簡介 awk是shell腳本里面文字處理神奇

Linux基礎--shell指令碼1

shell程式設計:      主要指令碼維護,用於偵聽使用者輸入指令,接受到這些指令,執行相應操作。     指令可以執行,靠的是shell環境變數     設定環境變數  &nbs

java調Python指令碼:java通過 Runtime.getRuntime().exec調Python指令碼一直沒有返回值,卡住了,資料太大

1、背景: 當我們呼叫系統外部的某個程式,此時就可以用Runtime.getRuntime().exec()來呼叫。這次java調Python演算法程式碼時,一直沒有返回值,卡住了,而用pycharm跑Python程式碼是正常的,說明是java這邊的問題。去看了後臺的java程序一直都在,掛

java調Python指令碼:java返回Python錯誤日誌

上一篇java調Python指令碼時沒有返回錯誤的日誌提醒行等,在這裡補上,主要用java.lang.Process.getErrorStream() 方法獲取子程序的錯誤流​​。資料流獲取由該Process物件表示的程序的錯誤輸出流的管道的資料。 1、java程式碼: pub

java調Python指令碼:傳引數問題

  java調Python的指令碼,我們需要將java這邊的引數傳到Python那邊使用,所以就需要傳參。 Python需要匯入系統包 import sys,然後使用 sys.argv[i] 接收java傳過來的引數就可以。 1、Python程式碼:

java調Python指令碼:java調Python亂碼問題

java調Python返回結果出現亂碼解決: Python指令碼編碼格式已經用了utf-8,但是返回還是亂碼,說明是java這邊傳過去編碼有問題。 1、Python編碼格式: 2、一般我們中文文字編碼格式常用的有:UTF-8,GBK,GB2312。分別試一下就知道了:

java調Python指令碼

java通過runtime.getruntime().exec()調Python指令碼,這是其中的一種方試,也是比較常用的方式。 1、Python指令碼: # -*- coding:utf-8 -*- """ @author:ailo55 @file:add.py @time:2018

Linux基礎--shell指令碼5

================================ while 迴圈          init     while [ con ]     do  &n

Linux基礎--shell指令碼4

判斷語句     格式五     if [ con1 ]     then         cmd1     elif

Linux基礎--shell指令碼3

選擇結構     格式一:         if [ con ]         then      &nb

Linux基礎--shell指令碼2

實現shell指令碼     1 建立指令碼檔案         touch file.sh     2 實現指令碼       

利用expect 指令碼ssh監控機器狀態

最近公司有個team 說想做一個tool 來解決機器硬體監控的問題,但是又不想去額外的申請防火牆(因為大公司,限制比較多) 我想了一下覺得可以做,記錄一下: 需求就是監控一批機器並且web 來展示狀態普通方案 如果採用普通方案,勢必引入防火牆問題,web servers

油猴指令碼tampermonkey:百度網盤搜尋引擎聚合

首先安裝油猴指令碼(tampermonkey)chrome:【油猴指令碼(tampermonkey)外掛】。chrome或者其他瀏覽器也可以去【油猴指令碼(tampermonkey)官網】下載。 程式碼首先在greasyfork上的分享 其次在吾愛油猴上的分享 再在guihub上的分享 最後我直接貼上

刪除過期檔案的shell指令碼linux

在linux下如何刪除過期的檔案 crontab -e  中新增      0 0 * * * find /home/jms -type f -mtime +2 -exec&

Shell_指令碼

七、流程控制 1、if判斷 1)語法 if [ 條件判斷 ];then 程式 fi 或者 if [ 條件判斷 ] then 程式 fi 注意: ① [ 條件判斷 ] 中括號和條件判斷式之間必須有空格 ② if後要有空格 2)例項

Shell_指令碼

一、Shell 指令碼入門 1、指令碼格式 指令碼以 #!/bin/bash 開頭(以#! 開頭,/bin/bash指定解析器) 2、HelloWord例項 建立資料夾datas和檔案helloworld.sh,並編輯 在檔案中輸入以下內容: 執行指令碼:

oracle增量指令碼記錄建立觸發器監控對一張表的增刪改

刪除表 drop table test_1; drop table test_1_log; drop table A1; drop table B1; drop table C1; –建立測試表 CREATE TABLE test_1( t_id NUMBER

爐石傳說指令碼

文章目錄 螢幕座標獲取工具程式碼 Update 螢幕座標獲取工具程式碼 #螢幕座標獲取工具 #匯出模組 import time import datetime import schedule import win32gui, win32api