datax有自带的reader和weiter模板
reader模板:datax/plugin/reader/
writer模板:datax/plugin/writer/
合并模板:
python3 /data/tools/datax_2024920/bin/datax.py -r sqlserverreader -w mysqlwriter > /data/tools/datax_2024920/job/sqlserver2mysql.json
json解释
{
"job": {
"content": [{
"reader": {
"name": "sqlserverreader",
"parameter": {
"username": "1",--用户名
"password": "11111",---密码
"column": ["*"],--字段
"connection": [{
"table": ["$readTable"],---表名
"jdbcUrl": ["jdbc:sqlserver://IP:端口;DatabaseName=库名"]
}],
"fetchSize": 20000 ---单次读取数量
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"username": "1",--用户名
"password": "1",---密码
"writeMode": "insert",---写入模式
"column": ["*"],---字段
"connection": [{
"jdbcUrl": "jdbc:mysql://IP:端口/库名",
"table": ["$writeTable"]-----表名
}],
"batchSize":20000, ---单次写入数量
"ignoreTagsUnmatched": false -----源表和目标表的字段不匹配,写入停止并报错
}
}
}],
"setting": {
"speed": {
"channel": "64" ----并发
}
}
}
}
writeMode支持的参数:
- insert:这是默认模式,DataX会使用insert into语句将数据插入到目标表中。如果遇到主键或唯一索引冲突,将会报错。
- replace:在这种模式下,如果存在重复的记录(基于主键或唯一索引),DataX会使用replace into语句替换掉原有的记录。这在MySQL中是可行的,但在其他数据库中可能需要使用不同的语法。
- update:在update模式下,DataX会使用INSERT INTO ... ON DUPLICATE KEY UPDATE语句(MySQL)或者相应的语法(其他数据库)来更新那些已经存在的记录。如果记录不存在,则会插入新记录。这种模式在MySQL中使用,并且需要指定更新的列。
- append:这种模式下,DataX会将数据添加到文件的末尾,主要用于写入HDFS等文件系统。
- truncate:在写入之前,DataX会清空表中的所有数据,然后写入新数据。
启动: python3 /data/tools/datax_2024920/bin/datax.py /data/tools/datax_2024920/job/sqlserver2mysql.json
MySQL内字段类型:datetime--精确到秒
SQL server字段类型:datetime---精确到毫秒
写入的时候没有报错,影响数据精度。
字段不匹配,所有数据不会导入(读取字段为浮点数导入整数时,可正常导入为整数)
#每半小时同步一次的json
{
"job": {
"content": [{
"reader": {
"name": "sqlserverreader",
"parameter": {
"username": "1",
"password": "11111",
"column": ["*"],
"connection": [{
"table": ["${readTable}"],
"jdbcUrl": ["jdbc:sqlserver://IP:端口;DatabaseName=库名"]
}],
"where": "时间字段 >= '${startTime}' AND 时间字段 < '${endTime}'",
"fetchSize": 20000
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"username": "1",
"password": "1",
"writeMode": "insert",
"column": ["*"],
"connection": [{
"jdbcUrl": "jdbc:mysql://IP:端口/库名",
"table": ["${writeTable}"]
}],
"batchSize": 20000,
"ignoreTagsUnmatched": false
}
}
}],
"setting": {
"speed": {
"channel": "64"
}
}
}
}
#!/bin/bash
# 获取当前时间和30分钟前的时间
end=$(date +"%Y-%m-%d %H:%M:%S")
start=$(date --date='-30 minutes' +"%Y-%m-%d %H:%M:%S")
# 设置DataX路径
DATAX_HOME=/data/tools/datax_202409
# 设置jobs路径
JOBS_HOME=/data/tools/datax_202409/job
# 增量导入数据
python $DATAX_HOME/bin/datax.py -p "-DstartTime=$start" -p "-DendTime=$end" $JOBS_HOME/sqlserver2mysql.json
半小时执行一次任务
*/10 * * * * /data/tools/datax_202409/datax_sync.sh >> /data/tools/datax_202409/datax_sync_$(date +%Y-%m-%d_%H-%M-%S).log 2>&1