最近做了一个项目,需要把oracle数据的表数据全量和增量抽取到mysql中,在调研了kettle和datax之后,果断选择了datax
,datax为阿里开源的抽数工具,gitlub上可以下载,简单的配置一下,即可使用,稳定高效
gitlub地址:https://github.com/alibaba/DataX
官网文档地址 :https://help.aliyun.com/document_detail/49808.html?spm=a2c4g.11186623.6.591.18e537d4sMMpz
{
"job": {
"content": [
{
"reader": {
"name": "oraclereader",
"parameter": {
"column": [
"grpcontno",
"contno",
"prtno"
],
"connection": [
{
"jdbcUrl": ["jdbc:oracle:thin:@127.0.0.1:1521:orcl"],
"table": ["LCAPPNT"]
}
],
"password": "********",
"username": "********",
"splitPk":"contno",
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"column": [
"grpcontno",
"contno",
"prtno"
],
"connection": [
{
"jdbcUrl": "jdbc:mysql://127.0.0.1:3306/mysql",
"table": ["LCAPPNT"]
}
],
"preSql": [
"drop table 语句",
"create table 语句"
],
"password": "*****",
"username": "*****"
}
}
}
],
"setting": {
"speed": {
"channel":10
}
}
}
}
这个例子是每次拉去全量数据从oracle表对表抽取到mysql,其实还可以实现增量抽取,这个需要些crontab和shell 脚本,
在linux上运行,crontab写定时任务去调度shell脚本,shell脚本里面执行job文件,执行命令datax官网有介绍,job配置文件各个
参数的意义也有介绍,增量抽取一般按照表的时间戳抽取,每次抽取前通过shell脚本读取预先保存在文件中的上次抽取日期,然后通过命令参数传入脚本中
#!/bin/bash
max_time="'$(cat /root/temp/dataxtime/jobtime_*)'"
echo $max_time
/root/datax/bin/datax.py /root/datax/job/test1.json -p "-Dmax_time=$max_time" >>/root/log/datax/test_log.`date +%Y%m%d` 2>&1 &
其他复杂一点例子,查阅一下资料后,自己稍加思考都可以做