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的发送邮件功能:
https://blog.csdn.net/weixin_43932609/article/details/108766325
ETL工具Kettle的列转行组件:
https://blog.csdn.net/weixin_43932609/article/details/108795244
ETL工具Kettle性能优化:
https://blog.csdn.net/weixin_43932609/article/details/108749304

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

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

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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

像豆芽一样优秀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值