Bpazy / blog

我的博客,欢迎关注和讨论
https://github.com/Bpazy/blog/issues
MIT License
39 stars 2 forks source link

慢用 DataX #191

Open Bpazy opened 3 years ago

Bpazy commented 3 years ago

记录一些使用 DataX 的知识点

Bpazy commented 3 years ago

writeMode

目前我使用的模式时 replace,但是实际抽取数据中发现,表中的 modifiedtime(更新时设置为当前时间) 没有更新。

表结构 ```sql CREATE TABLE `t_mapping_goods_extract_before_partinfo` ( `id` bigint unsigned AUTO_INCREMENT COMMENT '主键', `info_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '变化前info_id', `creationtime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建日期', `modifiedtime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP COMMENT '修改日期', `creator` bigint unsigned NOT NULL DEFAULT '0' COMMENT '创建人', `modifier` bigint unsigned NOT NULL DEFAULT '0' COMMENT '修改人', `is_deleted` tinyint NOT NULL DEFAULT '0' COMMENT '判断是否删除 0:未删除 1:删除', PRIMARY KEY (`id`), UNIQUE KEY `IDX_infoid` (`info_id`), KEY `IDX_CREATIONTIME` (`creationtime`), KEY `IDX_MODIFIEDTIME` (`modifiedtime`) ) ENGINE=InnoDB AUTO_INCREMENT = 1 COMMENT='测试表'; ```

看了文档后发现, mysqlwriterwritemode 分为几种: insert/replace/update 控制写入数据到目标表采用 insert into 或者 replace into 或者 ON DUPLICATE KEY UPDATE 语句

replace into 的表现是先 DELETE 再 INSERT, 所以我这里改成 update 模式即可。