kettle工作中常用的复杂实例-数据定时增量同步

需求

每两个小时源库数据到目标库,根据创建时间,更新时间进行增量同步

步骤

1.转换1,设置同步时间变量,查询同步日志表,查询上次同步成功的数据时间(表输入),将上次数据同步的时间和当前的系统时间作为系统环境变量(设置变量),方便后面的同步数据的查询
2.转换2,同步数据,查询创建时间或者更新时间大于环境变量中的上次数据同步时间的数据(表输入),插入或更新到目标表(插入/更新)
3.转换3,保存同步日志,插入一条,数据同步时间为第一步设置的本次同步时间,作为下次同步的数据时间条件。防止日志表过大,可以自定义保留条数(执行sql脚本)

建表脚本

DROP TABLE "DDW"."T_SOURCE";
CREATE TABLE "DDW"."T_SOURCE" (
  "ID" VARCHAR2(32 BYTE) NOT NULL,
  "NAME" NVARCHAR2(100),
  "BIRTH_DATE" DATE,
  "CREATOR" VARCHAR2(32 BYTE),
  "CREATED_TIME" DATE DEFAULT sysdate,
  "CREATED_UNIT" VARCHAR2(32 BYTE),
  "LAST_UPDATED_BY" VARCHAR2(32 BYTE),
  "LAST_UPDATED_TIME" DATE DEFAULT sysdate,
  "LAST_UPDATED_UNIT" VARCHAR2(32 BYTE),
  "IS_DEL" NUMBER(1,0) DEFAULT 0
)
TABLESPACE "SPRINGBOOT"
LOGGING
NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
  INITIAL 65536 
  NEXT 8192 
  MINEXTENTS 1
  MAXEXTENTS 2147483645
  BUFFER_POOL DEFAULT
)
PARALLEL 1
NOCACHE
DISABLE ROW MOVEMENT
;
COMMENT ON COLUMN "DDW"."T_SOURCE"."NAME" IS '名称';
COMMENT ON COLUMN "DDW"."T_SOURCE"."BIRTH_DATE" IS '出生日期';
COMMENT ON TABLE "DDW"."T_SOURCE" IS '源表';
ALTER TABLE "DDW"."T_SOURCE" ADD CONSTRAINT "PK_T_SOURCE" PRIMARY KEY ("ID");
DROP TABLE "DDW"."T_SOURCE_TARGET";
CREATE TABLE "DDW"."T_SOURCE_TARGET" (
  "ID" VARCHAR2(32 BYTE) NOT NULL,
  "NAME" NVARCHAR2(100),
  "BIRTH_DATE" DATE,
  "CREATOR" VARCHAR2(32 BYTE),
  "CREATED_TIME" DATE DEFAULT sysdate,
  "CREATED_UNIT" VARCHAR2(32 BYTE),
  "LAST_UPDATED_BY" VARCHAR2(32 BYTE),
  "LAST_UPDATED_TIME" DATE DEFAULT sysdate,
  "LAST_UPDATED_UNIT" VARCHAR2(32 BYTE),
  "IS_DEL" NUMBER(1,0) DEFAULT 0
)
TABLESPACE "SPRINGBOOT"
LOGGING
NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
  INITIAL 65536 
  NEXT 8192 
  MINEXTENTS 1
  MAXEXTENTS 2147483645
  BUFFER_POOL DEFAULT
)
PARALLEL 1
NOCACHE
DISABLE ROW MOVEMENT
;
COMMENT ON COLUMN "DDW"."T_SOURCE_TARGET"."NAME" IS '名称';
COMMENT ON COLUMN "DDW"."T_SOURCE_TARGET"."BIRTH_DATE" IS '出生日期';
COMMENT ON TABLE "DDW"."T_SOURCE_TARGET" IS '目标表';
ALTER TABLE "DDW"."T_SOURCE_TARGET" ADD CONSTRAINT "PK_T_SOURCE_TARGET" PRIMARY KEY ("ID");
--创建同步日志表的序列
create sequence SEQ_TBRZ
minvalue 1
maxvalue 999999999
start with 1
increment by 1
cache 20;
create table "DDW"."T_TBRZ"
(
  id     NUMBER,
  sjtbsj DATE,  
  zxsj DATE,
  bm     VARCHAR2(100),
  tbjg   CHAR(1)
)

TABLESPACE "SPRINGBOOT"
LOGGING
NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
  INITIAL 65536 
  NEXT 8192 
  MINEXTENTS 1
  MAXEXTENTS 2147483645
  BUFFER_POOL DEFAULT
)
PARALLEL 1
NOCACHE
DISABLE ROW MOVEMENT
;
COMMENT ON COLUMN "DDW"."T_TBRZ"."id" IS '主键';
COMMENT ON COLUMN "DDW"."T_TBRZ"."sjtbsj" IS '数据同步时间';
COMMENT ON COLUMN "DDW"."T_TBRZ"."zxsj" IS '执行时间';
COMMENT ON COLUMN "DDW"."T_TBRZ"."bm" IS '同步的表名';
COMMENT ON COLUMN "DDW"."T_TBRZ"."tbjg" IS '同步结果:1-成功;2-未成功';
COMMENT ON TABLE "DDW"."T_TBRZ" IS '同步日志表';

数据同步作业

包含三个转换
在这里插入图片描述

设置同步时间变量

在这里插入图片描述

SELECT
nvl(max(SJTBSJ-1/12),sysdate-1/12) as V_SJTBSJ,sysdate as V_BCSJTBSJ
FROM DDW.T_TBRZ
where bm = 'T_SOURCE' and tbjg='1'

在这里插入图片描述

查询同步数据

在这里插入图片描述

SELECT
*
FROM DDW.T_SOURCE
where 
CREATED_TIME > TO_DATE(SUBSTR('${V_SJTBSJ}', 0, 19), 'yyyy-mm-dd hh24:mi:ss')
or
LAST_UPDATED_TIME > TO_DATE(SUBSTR('${V_SJTBSJ}', 0, 19), 'yyyy-mm-dd hh24:mi:ss')

在这里插入图片描述

保存同步日志

在这里插入图片描述

insert into DDW.T_TBRZ(ID,SJTBSJ,ZXSJ,BM,TBJG) VALUES(SEQ_TBRZ.NEXTVAL,
TO_DATE(SUBSTR('${V_BCSJTBSJ}', 0, 19), 'yyyy-mm-dd hh24:mi:ss'),
SYSDATE,
'T_SOURCE',
'1'
);


DELETE 
FROM
	DDW.T_TBRZ
WHERE
	TBJG = '1' 
	AND BM = 'T_SOURCE' 
	AND id IN (
	SELECT
		id 
	FROM
		( SELECT ID, ROWNUM RN FROM ( SELECT ID FROM DDW.T_TBRZ WHERE TBJG = '1' AND BM = 'T_SOURCE' ORDER BY ID DESC ) ) 
	WHERE
	rn > 10 
	);
commit;
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
kettle是一款强大而实用的ETL工具,可以帮助我们在日常工作高效地完成数据的抽取、转换和加载。以下是一些来自真实项目的kettle实用教程。 首先,我们可以使用kettle进行数据抽取。在真实项目,我们经常需要从不同的数据提取数据。通过kettle的“数据库输入”步骤,我们可以轻松地从关系型数据抽取数据。另外,kettle还支持从文件、Web服务和其他非关系型数据提取数据,使得数据抽取工作变得非常简单。 其次,kettle还可以帮助我们进行数据转换。在真实项目,我们通常需要对数据进行清洗、整合和转换。通过kettle的“转换”步骤,我们可以方便地进行各种数据处理操作,如字段的拆分、合并和替换,数据的过滤和排序等。此外,kettle还提供了丰富的转换函数和条件语句,使得数据转换变得更加灵活和强大。 最后,kettle还可以帮助我们进行数据加载。在真实项目,我们常常需要将处理后的数据加载到目标系统。通过kettle的“数据库输出”步骤,我们可以轻松地将数据加载到关系型数据。此外,kettle还支持将数据写入文件、Web服务和其他非关系型数据,使得数据加载工作变得非常便捷。 除了上述功能,kettle还提供了很多其他强大的组件和功能,如邮件发送、调度任务、错误处理等,使得我们可以更加灵活和高效地完成各种数据处理任务。 总结来说,kettle是一款功能强大而实用的ETL工具,在真实项目有着广泛的应用。通过kettle,我们可以轻松地进行数据抽取、转换和加载,提高工作效率和数据质量。无论是初学者还是有经验的开发人员,都可以通过学习和使用kettle来改善数据处理工作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大佬腿好粗

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

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

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

打赏作者

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

抵扣说明:

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

余额充值