資料載入操作手冊

gblfy發表於2020-11-28

簡述:
將ods推送的資料檔案,載入到資料庫的臨時B表中,然後通過儲存過程將臨時B表中的資料同步到目標A表中。
注:臨時B表結構和目標A表表結構必須一致,同步失敗。

一、基礎資料準備
1.1.表名規約

ods同步表的表名稱、欄位名稱、欄位數量規範,雙方需要提前約定好,一旦約定好不允許修改,否則載入資料和同步資料會失敗。

1.2.設計1套臨時表和1套同構層表

臨時B表作用:將ods推送的資料檔案內容載入到資料庫的臨時表中,每次執行指令碼臨時表中的資料會清空。
注:臨時B表可以理解為緩衝區

同構層表作用:儲存或者備份推送過來的資料,資料不會也不允許更改。
同構層表目的:查閱資料問題可以直接查閱同構層表的資料,不用請求其他系統諮詢,減少時間損耗和提高資料區配的效率。

1.3.儲存過程

設計與表關係為1:1的儲存過程
儲存過程作用:將臨時B表中的資料同步到目標的A表中。
注:同步資料種類:有全量-0和增量-1

二、流程規範
2.1. 生成控制檔案(.ctl)
cd /app/jiazai/sql_loadv1.0/control/
rm -rf new.unl  old.unl file/
sh ./new.sh
2.2. 拉取ods推送的資料檔案
#進入sql_loadv1.0下面
cd /app/jiazai/sql_loadv1.0/
#拉取ods推送指定日期的資料檔案
#格式:sh load.sh 年月日
案例:sh load.sh 20201027
2.3. 資料載入+資料同步

將資料檔案的資料載入到臨時B表 把臨時表到B表資料同步到目標A表
#進入拉取的某一天資料檔案的目錄

cd /app/jiazai/sql_loadv1.0/loaded/20201027/

#1.將資料檔案中的資料載入到資料庫中的臨時B表中
#2.將資料庫中的臨時B表中的資料同步到目標A表中

sh run_sqlldr.sh

注:run_sqlldr.sh這個指令碼做了2件事情

三、手動排程

如當天的排程出現問題,修正後,想手動指定跑某張表的資料

3.1. 到下載的資料檔案路徑:

例:/app/jiazai/sql_loadv1.0/loaded/20180918

3.2. 資料檔案篩選

修改/app/jiazai/sql_loadv1.0/loaded/載入的資料檔案日期/f.unl:只保留需要載入的批次表資訊(簡言之,那個表的資料沒有載入成功,只留下對應這個表的資料檔案即可。
這是有資料的全部資料檔案)

案例:
如果:20201027這一天dbx_ljtempfee 表資料載入失敗,就留下dir.ods.dbx_ljtempfee.20201027.000.01.i這一行,把其他資料檔案刪除。

3.3. 將要載入的表的備份表清空;

例:T01_INDV_CUST_HB
修改/app/jiazai/sql_loadv1.0/sql/truncateyw.sql
只保留TRUNCATE TABLE T01_INDV_CUST_HB;
/app/jiazai/sql_loadv1.0/loaded/20201027路徑下執行

sh truncateyw.sh
3.4. 資料載入指令碼執行
cd /app/jiazai/sql_loadv1.0/loaded/20201027/
sh ./run_sqlldr.sh
3.5. sql還原

/app/jiazai/sql_loadv1.0/sql/truncateyw.sql還原

四、輪詢定時排程

定時每天呼叫/app/jiazai/sql_loadv1.0/hxloadupgrade.sh
自動將前一天的資料載入到行協test使用者下的表中。

4.1. 設定指令碼執行頻次

編輯定時任務配置檔案:

crontab –e
4.2. 設定執行頻次
案例:每天上午10:15觸發:0 15 10 * * ?  /app/jiazai/sql_loadv1.0/hxloadupgrade.sh
4.3. 定時任務檢視
crontab -l
五、日誌軌跡

第一次初始化:
待ODS將全部資料檔案推送至資料交換平臺後,手動在 /app/jiazai/sql_loadv1.0路徑下執行sh load.sh 要載入的資料資料夾名(例:sh load.sh 20201027)
生成的日誌檔案在以下兩個資料夾下:
/app/jiazai/sql_loadv1.0/hx_loadlog
/app/jiazai/sql_loadv1.0/loaded/日期(例如:20201027)/load/log
可以去資料庫中的日誌表查詢
load_log 記錄表載入入備份表的狀態
LOAD_PL_LOG記錄表從備份表到目標表正確的狀態
LOAD_PL_ERROR_LOG記錄表從備份表到目標表錯誤的狀態
例:

SELECT * FROM load_log where  to_Char(load_time,'yyyymmdd') =20200330 ; --實際載入日期
SELECT * FROM LOAD_PL_LOG where  to_Char(s_time,'yyyymmdd') =20200330 ;--實際載入日期  
SELECT * FROM LOAD_PL_ERROR_LOG where  to_Char(s_time,'yyyymmdd') =20200330 ;--實際載入日期  

注意:
如果第一次初始話在凌晨3點前完成資料載入,則crontab -e
解除定時的註釋,以後每天3:00-9:00會自動載入呼叫。

如果第一次初始化不能在凌晨3點前載入完成、或日後出現9點前未將32張介面表資料檔案全部推送完成、或ODS修復資料重新推數,需運維手動呼叫進行載入完成後,再crontab -e
解除定時的註釋,以後每天3:00-9:00會自動載入呼叫
如運維手動呼叫:
/app/jiazai/sql_loadv1.0路徑下執行sh loadyw.sh 要下載的資料資料夾名
指令碼執行完成後,去資料庫中確認以下26張表中資料是否全部被刪除

確認無誤後到
/app/jiazai/sql_loadv1.0/loaded/日期(就是所要載入的資料資料夾名例如:20201027)路徑下執行

sh run_sqlldr.sh

輪詢定時排程:
定時每天呼叫/app/jiazai/sql_loadv1.0/hxloadupgrade.sh
自動將前一天的資料載入到行協test使用者下的表中。
定時檢視:crontab -l

ODS資料檔案從資料交換平臺下載到:
/app/jiazai/sql_loadv1.0/loaded/指定日期資料夾
例:/app/jiazai/sql_loadv1.0/loaded/20201027路徑下
裝載後的資料檔案存放在:(如果有失敗的表,路徑下會產生*.bad檔案)
例:/app/jiazai/sql_loadv1.0/loaded/20201027/load/data路徑下

如當天的裝載有失敗的表,需檢視日誌確定原因。
檢視每張表裝載日誌:
例:/app/jiazai/sql_loadv1.0/loaded/20201027/load/log/表名.log
資料庫中的日誌表:

表名作用
load_z_log每天只生成1條記錄,記錄每天整體裝載情況
load_log記錄表載入入備份表的狀態
LOAD_PL_LOG記錄表從備份表到目標表正確的狀態
LOAD_PL_ERROR_LOG記錄表從備份表到目標表錯誤的狀態

相關文章