用 flink 插件chunjun实现全量+增量同步-达梦数据库到postgresql

用 flink 插件chunjun实现全量+增量同步,这里以达梦数据库同步到postgresql数据库为例。

纯钧下载地址:纯钧

纯钧是一款稳定、易用、高效、批流一体的数据集成框架,目前基于实时计算引擎Flink实现多种异构数据源之间的数据同步与计算,已在上千家公司部署且稳定运行。

达梦表ddl:

sql 复制代码
CREATE TABLE SYSDBA.SOURCE_TABLE (
	ID INT NOT NULL,
	NAME VARCHAR(100),
	CREATE_TIME INT,
	CONSTRAINT PK_SOURCE_TABLE_ID PRIMARY KEY (ID)
);
CREATE UNIQUE INDEX INDEX33555468 ON SYSDBA.SOURCE_TABLE (ID);

postgresql ddl:

sql 复制代码
CREATE TABLE public.SINK_TABLE (
	id int4 NOT NULL,
	"name" varchar(100) NULL,
	create_time int4 NULL,
	CONSTRAINT pk_SINK_TABLE_id2 PRIMARY KEY (id)
);

纯钧的sql:

sql 复制代码
create table SOURCE_TABLE(
    ID  INT, 
    NAME varchar(200),
    CREATE_TIME INT
    )
with (
      'connector' = 'dm-x',
      'url' = 'jdbc:dm://11.0.24.107:5236',
      'schema' = 'SYSDBA',
      'table-name' = 'SOURCE_TABLE',
      'username' = 'SYSDBA',
      'password' = 'SYSDBA001',
      'scan.increment.column' = 'CREATE_TIME',
      'scan.increment.column-type' = 'int',
      'scan.polling-interval' = '3000',
      'scan.fetch-size' = '200',
      'scan.query-timeout' = '10'
);
CREATE TABLE SINK_TABLE (
    id INT,
    name varchar(200),
    create_time INT,
    PRIMARY KEY (id) NOT ENFORCED)
    with (
    'password'='sys',
    'connector'='postgresql-x',
    'sink.buffer-flush.interval'='1000',
    'sink.all-replace'='true',
    'sink.buffer-flush.max-rows'='100',
    'table-name'='SINK_TABLE',
    'sink.parallelism'='1',
    'url'='jdbc:postgresql://11.0.101.10:39001/sys',
    'username'='sys'
    );
insert into SINK_TABLE select ID,NAME,CREATE_TIME from SOURCE_TABLE;

原理就是根据create_time这个字段的更新而增量更新修改、添加操作。

参数解释:

,'scan.increment.column' = 'create_time' -- 增量字段,根据这个字段判断是否更新

,'scan.increment.column-type' = 'int' -- 增量字段类型

,'scan.polling-interval' = '3000' --间隔轮训时间。非必填(不填为离线任务,执行一次就技术),无默认

'sink.all-replace' = 'true', -- 解释如下(其他rdb数据库类似):默认:false。定义了PRIMARY KEY才有效,否则是追加语句

-- sink.all-replace = 'true' 生成如:INSERT INTO `result3`(`mid`, `mbb`, `sid`, `sbb`) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE `mid`=VALUES(`mid`), `mbb`=VALUES(`mbb`), `sid`=VALUES(`sid`), `sbb`=VALUES(`sbb`) 。会将所有的数据都替换。

-- sink.all-replace = 'false' 生成如:INSERT INTO `result3`(`mid`, `mbb`, `sid`, `sbb`) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE `mid`=IFNULL(VALUES(`mid`),`mid`), `mbb`=IFNULL(VALUES(`mbb`),`mbb`), `sid`=IFNULL(VALUES(`sid`),`sid`), `sbb`=IFNULL(VALUES(`sbb`),`sbb`) 。如果新值为null,数据库中的旧值不为null,则不会覆盖。

相关推荐
Justice link几秒前
企业级NoSql数据库Redis集群
数据库·redis·缓存
爱的叹息1 分钟前
主流数据库的存储引擎/存储机制的详细对比分析,涵盖关系型数据库、NoSQL数据库和分布式数据库
数据库·分布式·nosql
Loving_enjoy27 分钟前
基于Hadoop的明星社交媒体影响力数据挖掘平台:设计与实现
大数据·hadoop·数据挖掘
浮尘笔记33 分钟前
go-zero使用elasticsearch踩坑记:时间存储和展示问题
大数据·elasticsearch·golang·go
XiaoLeisj36 分钟前
【MyBatis】深入解析 MyBatis XML 开发:增删改查操作和方法命名规范、@Param 重命名参数、XML 返回自增主键方法
xml·java·数据库·spring boot·sql·intellij-idea·mybatis
dleei1 小时前
MySql安装及SQL语句
数据库·后端·mysql
信徒_2 小时前
Mysql 在什么样的情况下会产生死锁?
android·数据库·mysql
碳基学AI2 小时前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义免费下载方法
大数据·人工智能·python·gpt·算法·语言模型·集成学习
嘴对嘴编程3 小时前
oracle数据泵操作
数据库·oracle
一个天蝎座 白勺 程序猿3 小时前
大数据(4.6)Hive执行引擎选型终极指南:MapReduce/Tez/Spark性能实测×万亿级数据资源配置公式
大数据·hive·mapreduce