ETL工具kettle的插入更新操作

一、 示例脚本:

# 创建表
CREATE TABLE `score` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `sname` varchar(255) DEFAULT NULL COMMENT 学生姓名,
  `cname` varchar(255) DEFAULT NULL COMMENT 课程名称,
  `score` int DEFAULT NULL COMMENT 分数,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

CREATE TABLE `score2` (
  `sname` varchar(255) NOT NULL COMMENT 学生姓名,
  `cname` varchar(255) DEFAULT NULL COMMENT 课程名称,
  `score` int DEFAULT NULL COMMENT 分数,
  PRIMARY KEY (`sname`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
# 插入数据
insert into score values(1,"小孙","mysql",55);
insert into score values(2,"小孙","python",66);
insert into score values(3,"小孙","java",47);
insert into score values(4,"小郭","mysql",70);
insert into score values(5,"小郭","python",85);
insert into score values(6,"小林","java",67);
insert into score values(7,"小林","mysql",77);
insert into score values(8,"小1","mysql",55);
insert into score values(9,"小2","python",66);
insert into score values(10,"小3","java",47);

二、实现目标

本文主要以利用表主键来进行插入(表中没有的数据)、更新(表中已有的数据)。

三、 实现流程

  1. 表输入组件 把数据抽取至工作流。
  2. 表输出控件 注意:由于事务的机制,此处提交记录数量必须输入“1”,大于 1 的情况,会导致数据不能更新。
  3. 更新组件 对于插入错误的数据进行更新操作

四、MySQL

关于MySQL内置的更新、插入语句

INSERT INTO baidu (TITLE,LINK) VALUES (产品介绍 - 八爪鱼采集器,这是一条测试数据) ON DUPLICATE KEY UPDATE LINK = 这是一条测试数据;

可能出现三种情况:

  1. 受影响的行: 0 时间: 0.002s 表示已经有一条相同的数据
  2. 受影响的行: 1 时间: 0.002s 表示TITLE字段没有这条数据, 并插入
  3. 受影响的行: 2 时间: 0.002s 表示有相同的TITLE数据且更新LINK字段 注意: 使用ON DUPLICATE KEY UPDATE时,默认情况下,每次更新都会更新该表的自增主键ID,那就会造成主键不连续自增。

五、 SQL语句

Merge关键字是一个神奇的DML关键字。它在SQL Server 2008被引入。例如,根据在另一个表中找到的差异在一个表中插入、更新或删除行,可以对两个表进行同步。
# DATABASES.TABLE = 目标表
# DATABASES.TABLE2 = 中间表

MERGE INTO DATABASES.TABLE AS T
USING DATABASES.TABLE2 AS S
ON T.ID = S.ID
WHEN MATCHED THEN UPDATE SET
T.COL_NAME = S.COL_NAME # 当比对存在则更新数据
T.COL_NAME2 = S.COL_NAME2
WHEN NOT MATCHED THEN INSERT
(T.COL_NAME,T.COL_NAME2......) # 当比对不存在则插入数据
VALUES
(S.COL_NAME,S.COL_NAME2......)

相关内容

ETL工具Kettle的发送邮件功能: ETL工具Kettle的列转行组件: ETL工具Kettle性能优化:

=========================================================

人生得意须尽欢,莫使金樽空对月! __一个热爱说唱的程序员。

=========================================================

经验分享 程序员 微信小程序 职场和发展