数仓 调度_database-sync: 数据库表同步工具、数据仓库工具、数据集市工具,数据抽取。传入一定的参数,即可在相同或不同的数据库间进行表的同步,包括表结构的同步及数据的同步。作业由调试工具进...

database-sync是一款跨平台的Java程序,用于数据库表同步,支持数据和结构的增量或全量更新。它能连接多种主流数据库,如Mysql、Oracle等,并通过配置文件管理数据库信息。程序提供了灵活的字段选择和增量更新功能,适用于数据仓库和集市的构建。用户需安装Java 1.8+和Maven,通过简单命令行操作即可执行数据同步任务。
摘要由CSDN通过智能技术生成

介绍

java 程序编写,真正跨平台。本程序的最大用处就是构建集市或数仓所需要的基础层数据源。

简单的传入一定的参数,即可跨数据库实现以下功能:

两个表之间数据的同步,可以增量或全量更新。

两个表表结构的同步,包括自动建表,原表扩字段长度或增加字段,目标表也做相同动作。

支持指定原表或目标表的字段序列,更灵活。默认按目标表的字段序列查询原表的字段序列。

支持视图到表的数据抽取。

日志记录、插入记录数统计、耗时统计。

结合调度工具,您可以轻松搭建一个数据仓库或集市。

目前项目已经投入生产使用 ,欢迎感兴趣的朋友一起加入。

程序的使用方法

数据库的信息写在配置文件中,计划支持各种主流关系型数据库,如 MysqL、Db2、Oracle、PostgreSQL。

程序运行前确保已安装 java 1.8 或后续版本,已经安装 maven,如果没有请安装一下,网上到处都是安装教程。

然后 clone 源码,打包:

git clone https://gitee.com/somenzz/database-sync.git

cddatabase-sync

mvn package

cdtarget

java -jar database-sync-1.1.jar

程序名称叫 database-sync,运行方式是这样的:

(py37env) ➜ target git:(master) ✗ java -jar database-sync-1.1.jar

Usage:

java -jar database-sync-1.0.jar [options] {fromDB} {fromSchema} {fromTable} {toDB} {toSchema} {toTable} [whereClause]

options:

--version or -v :print version thenexit

--help or -h :print helpinfo thenexit

--simple or -s :use insert into table A select * from B mode, ignore table's structure

--from_fields={col1,col2} or -ff={col3,col4} :specify from fields

--to_fields={col1,col2} or -tf={col3,col4} :specify to fields

帮助说明:

[] 中括号里的内容表示选填,例如 [options] 表示 options 下的参数不是必须的。

1、其中 options 参数解释如下:

--simple 或者 -s : 简单模式,此时只进行数据传输,不进行表构的同步。

--from_fields=col1,col2 或者 -ff=col1,col2 : 指定原表的字段序列,注意 = 前后不能有空格。

--to_fields=col3,col4 或者 -tf=col3,col4 : 指定目标表的字段序列,注意 = 前后不能有空格。

2、whereClause 表示 where 条件,用于增量更新,程序再插入数据前先按照 where 条件进行清理数据,然后按照 where 条件从原表进行读取数据。 whereClause 最好使用双引号包起来,表示一个完整的参数。如:"jyrq='2020-12-31'"

{} 大括号里的内容表示必填。

fromDb 是指配置在 config.json 的数据库信息,假如有以下配置文件:

{

"postgres":{

"type":"postgres",

"driver":"org.postgresql.Driver",

"url":"jdbc:postgresql://localhost:5432/apidb",

"user":"postgres",

"password":"aaron"

},

"aarondb":{

"type":"mysql",

"driver":"com.mysql.cj.jdbc.Driver",

"url":"jdbc:mysql://localhost:3306/aarondb?useSSL=false&characterEncoding=utf8&serverTimezone=UTC",

"user":"aaron",

"password":"aaron"

}

}

则 fromDb、toDb 可以是 aarondb 或者 postgres。

fromSchema 读取数据的表的模式名,可以填写 "".

fromTable 读取数据的表明,必须提供。

toSchema 写入数据表的模式名,可以填写 "",可以和 fromSchema 不同.

toTable 写入数据表的表名,必须提供,当写入表不存在时,自动按读取表的表结构创建,可以和 fromTable 不同。

增量更新

java -jar database-sync.jar {fromDb} {fromSchema} {fromTable} {toDb} {toSchema} {toTable} [whereClause]

与全量更新的唯一区别是可以提供 where 条件,程序按 where 条件自动清理数据,写入数据。

配置文件说明

配置文件位于 config/config.json,如下所示:

{

"sjwb":{

"type":"db2",

"driver":"com.ibm.db2.jcc.DB2Driver",

"url":"jdbc:db2://192.168.1.*:50000/wbsj",

"user":"****",

"password":"****",

"encoding":"utf-8"

},

"dw_test":{

"type":"db2",

"driver":"com.ibm.db2.jcc.DB2Driver",

"url":"jdbc:db2://192.168.169.*:60990/dwdb",

"user":"****",

"password":"****",

"encoding":"gbk"

},

"postgres":{

"type":"postgres",

"driver":"org.postgresql.Driver",

"url":"jdbc:postgresql://10.99.**.**:5432/apidb",

"user":"****",

"password":"****",

"encoding":"utf-8"

},

"aarondb":{

"type":"mysql",

"driver":"com.mysql.cj.jdbc.Driver",

"url":"jdbc:mysql://localhost:3306/aarondb?useSSL=false&characterEncoding=utf8&serverTimezone=UTC",

"user":"****",

"password":"****",

"encoding":"utf-8"

},

"buffer-rows":100000

}

配置文件说明:

buffer-rows 表示读取多少行时一块写入目标数据库,根据服务器内存大小自己做调整,100000 行提交一次满足大多数情况了。

encoding 用于表结构同步时,utf-8 库的字符串长度应该是 gbk 库字符串长度的 2 倍,可以解决字段含有中文的问题,为什么是 2 倍? 为了字符串的长度不会出现小数位。

编写目的

提高数据库间表的同步效率,如果是轻加工,就丢掉低效的 datastage 和 kettle 吧。

参与贡献

张慧峰

施云霄

高鹏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值