專案每天需要從oracle,gbase8a,mysql三種資料庫中抽取增量資料和全量資料到阿里的ads中,之前是基於kettle+crontab來實現資料的抽取與排程的。因kettle配置簡易,但抽取效率低,無法滿足業務的日常使用,目前開源軟體datax在測試期間效能與效果都能滿足業務需要,但也有乙個缺點,那就是datax的json配置檔案配置起來不太方面,於是就有了這篇文章。
1、將kettle同步的業務表修改為了datax同步
2、oracle資料庫中有70張業務,gbase8a中有60張,mysql中有85張
3、ads中的表結構與oracle,gbase8a中的業務表結構保持一致。
datax的主要工作是書寫json配置檔案,即源庫與目標庫中業務表字段的對應關係,而這一部分都是ctl +c、ctl+v 操作,所以通過相應的sql語句與shell相結合即可解決繁瑣的配置操作。
1、制定json同步模板及格式
2、通過sql語句獲取業務表的字段
3、通過shell批量生成同步表的json配置檔案
1、模板格式
gbase_template.txt
,"errorlimit":}
,"content":[
","password"
:"$"
,"connection":[
"]}]
,"fetchsize"
:1024}}
,"writer":"
,"password"
:"$"
,"presql":[
"truncate table table_name"],
"column":[
target_sql
],"connection":[
"}]}
}}]}
}
oracle_ template配置模板
,"errorlimit":}
,"content":[
","password"
:"$"
,"connection":[
"]}]
,"fetchsize"
:1024}}
,"writer":"
,"password"
:"$"
,"presql":[
"truncate table table_name"],
"column":[
target_sql
],"connection":[
"}]}
}}]}
}
2、獲取業務表字段的sql語句
sql語句生成的格式內容如下,後面發現"truncate table schema_name.table_name"可以不需要的
oracle_schema_name_table_name "truncate table schema_name.table_name" schema_name.table_name obj_id,obj_dispidx "obj_id"
,"obj_dispidx"
3、shell指令碼編寫
#!
/bin/bash
#function:generate configuration datax json file
#author:by lineqi
#crt_time:2020-10-13
v_dir=
/data/datax_jobs
cd $v_dir
cat oracle_info.txt |
while read line
do v_datax_name=`echo $line|awk ''`
v_table_name=`echo $line|awk ''`
v_source_sql=`echo $line|awk ''`
v_target_sql=`echo $line|awk ''`
#echo $v_datax_name
#echo $v_table_name
#echo $v_source_sql
#echo $v_target_sqlif[
-f "$v_datax_name.json"
]; then
mv -f $v_datax_name.json $v_datax_name.json.bak
fi
cp oracle_template.txt $v_datax_name.json
sed -i "s/table_name/$v_table_name/g" $v_datax_name.json
sed -i "s/source_sql/$v_source_sql/g" $v_datax_name.json
sed -i "s/target_sql/$v_target_sql/g" $v_datax_name.json
done
1、mysql5.6中group_concat函式預設長度為1024,如果將多個列轉成一行時,超過該長度會被擷取
解決方法:
set global group_concat_max_len = 4294967295;
set session group_concat_max_len = 4294967295
1、這裡只寫的datax配置檔案批量的生成方式,最終還是需要通過排程來實現資料同步操作,這裡採用的是dolphinscheduler1.3.2最新版來實現排程工作,dolphinscheduler的配置在後面的文章中給出.
2、模板裡的資料庫連線資訊是在dolphinscheduler裡配置好的
dolphinscheduler:
datax:
models批量生成資料
1.將資料生成為 列表序列,通過 bulk create 將資料一次插入資料庫中 def host request 插入資料速度快消耗資源少 hostlist for i in range 303 生成book物件 host obj models.host hostname c str i com ...
同步資料庫神器DataX
datax同步資料步驟很簡單,其他不少人,寫的華麗呼哨,自己總結一篇。試了window 估計linux 一樣,步驟如下 安裝datax要求 python 2或者3 jdk 解壓出來是這樣 然後開啟 開啟 datax bin資料夾,再這個目錄下面cmd執行指令碼命令 中文亂碼 處理 回車就不是中文亂碼...
Django 建立model並遷移生成資料庫表
第一步 建立model 在應用內models.py檔案裡編寫具體model,例如,投票和選項兩個model 第二步 啟用model 將應用新增到專案裡 在專案根目錄執行 python manage.py makemigrations polls會生成乙個以數字開頭的遷移檔案,當你對模型進行修改後都應...