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”,大于 1 的情况,会导致数据不能更新。
- 更新组件 对于插入错误的数据进行更新操作
四、MySQL
关于MySQL内置的更新、插入语句
INSERT INTO baidu (TITLE,LINK) VALUES (产品介绍 - 八爪鱼采集器,这是一条测试数据) ON DUPLICATE KEY UPDATE LINK = 这是一条测试数据;
可能出现三种情况:
- 受影响的行: 0 时间: 0.002s 表示已经有一条相同的数据
- 受影响的行: 1 时间: 0.002s 表示TITLE字段没有这条数据, 并插入
- 受影响的行: 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性能优化:
=========================================================
人生得意须尽欢,莫使金樽空对月! __一个热爱说唱的程序员。
=========================================================
