sqoop腳本

                                                                        關係型數據庫到大數據平臺到關係型數據庫shell腳本
測試腳本
#!/bin/bash
yy=$(date -d 'yesterday' +'%Y')
mm=$(date -d 'yesterday' +'%m')
dd=$(date -d 'yesterday' +'%d')
建基礎表分區目錄
hdfs dfs -mkdir -p /ZYB/ORDER_INFO/yy=$yy/mm=$mm

數據增量導入到hdfs的shell腳本

採用了snappy壓縮

#!/bin/bash
yy=$(date -d 'yesterday' +'%y')
YY=$(date -d 'yesterday' +'%Y')
mm=$(date -d 'yesterday' +'%m')
dd=$(date -d 'yesterday' +'%d')
hdfs dfs -mkdir -p /ZYB/CHECK_RECORD/yy=$yy/mm=$mm
sqoop import --connect jdbc:oracle:thin:@10.26.122.122:1521:ORCL --username read_bigdata --password HdmHz4i!hbkalv1pcbez --target-dir /ZYB/CHECK_RECORD/yy=${yy}/mm=${mm}/dd=${dd} --num-mappers 1 --table ZHIYOUBAO.CHECK_RECORD --hive-drop-import-delims --fields-terminated-by '\001' --lines-terminated-by '\n' --optionally-enclosed-by '\"' --where "to_char(CREATE_TIME,'yyyy-mm-dd')='${YY}-${mm}-${dd} '" --compress  --compression-codec org.apache.hadoop.io.compress.SnappyCodec
hive --database zhiyoubao -e "alter table CHECK_RECORD add partition (year=${yy},month=${mm},day=${dd}) location '/ZYB/CHECK_RECORD/yy=${yy}/mm=${mm}/dd=${dd}/';"
數據加載到基礎表中(添加分區)
hive --database zhiyoubao -e "alter table ORDER_INFO add partition (years=$yy,months=$mm,days=$dd) location '/ZYB/ORDER_INFO/yy=$yy/mm=$mm/dd=$dd/';"
將基礎表數據查詢insert到目標表中
hive -e 'insert into table totallots.sd_everyday_order_info select substr(modify_time,0,10)date,sum(already_check_num)
checked_num ,sum(need_check_num)scheduled_num,sum(close_fee)everyday_gmv,sum(if(check_status="checked" or 
check_status="checking",close_fee,0))checked_fee,sum(return_fee)return_fee,count(id)order_num from zhiyoubao.order_info 
group by substr(modify_time,0,10) having substr(modify_time,0,10)="'${yy}-${mm}-${dd}'";'
增量導入到mysql
sqoop export --connect "jdbc:mysql://192.168.0.197:3306/dac_lots?useUnicode=true&characterEncoding=utf-8"  --username root 
--password root --table sd_everyday_order_info   --export-dir '/user/hive/warehouse/totallots.db/sd_everyday_order_info' 
--input-null-string "\\\\N" --input-null-non-string "\\\\N" --input-fields-terminated-by "\001" --input-lines-terminated-by 
"\\n" -m 1 --update-mode allowinsert --update-key statis_date

--------------

如果UPDATE語句修改沒有行,這不被認爲是錯誤; 導出將靜默繼續。 (實際上,這意味着基於更新的導出不會將新行插入數據庫。)同樣,如果使用--update-key指定的列不能唯一標識行,並且單個語句更新多個行,則 條件也未檢測到。
參數--update-key也可以給出逗號分隔的列名列表。 在這種情況下,Sqoop將在更新任何現有記錄之前匹配此列表中的所有鍵。
根據目標數據庫,如果要更新行(如果它們已存在於數據庫中)或插入行(如果尚未存在),則也可以使用allowinsert模式指定--update-mode參數。

--------------

導出控制參數:
   --batch指示要在批處理模式下執行的基礎語句
   --call <arg>使用此存儲填充表
  過程(每行一個調用)
   --clear-staging-table表明可以刪除登臺表中的任何數據
   --columns <col,col,col ...>要導出到表的列
   --direct使用直接導出快速路徑
   --export-dir <dir>導出的HDFS源路徑
-m, - num-mappers <n>使用'n'個映射任務並行導出
   --mapreduce-job-name <name>設置生成的mapreduce作業的名稱
   --staging-table <table-name>中間登臺表
   --table <table-name>要填充的表
   --update-key <key>按指定的鍵列更新記錄
   --update-mode <mode>指定當在數據庫中找到具有非匹配鍵的新行時如何執行更新
   --validate使用配置的驗證程序驗證副本
   --validation-failurehandler <validation-failurehandler> ValidationFa ilureHandler的完全限定類名
   --validation-threshold <validation-threshold>完全限定類名
               HCatalog參數:
   --hcatalog-database <arg> HCatalog數據庫名稱
   --hcatalog-home <hdir>覆蓋$ HCAT_HOME
   --hcatalog-partition-keys <partition-key>設置要使用的分區鍵
 導入到hive
   --hcatalog-partition-values <partition-value>設置要使用的分區值
 導入到hive
   --hcatalog-table <arg> HCatalog表名
   --hive-home <dir>覆蓋$ HIVE_HOME
   --hive-partition-key <partition-key>設置導入hive時使用的分區鍵
   --hive-partition-value <partition-value>設置要使用的分區值
 導入到hive
   --map-column-hive <arg>覆蓋特定列的映射
hive類型。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章