基于CDC变更数据的导入与导出
文章目录
1.准备工作
2.基于时间戳的源数据的CDC案例
3.基于自增序列的源数据的CDC案例
4.基于触发器的CDC案例
一、创建student_cdc.csv表
包括学号,性别,年龄,年级,成绩,身高,手机,插入时间,更新时间。
二、将csv表转换成cdc表
1.转换的设计图
CSV文件输入到表输出
2.配置CSV文件输入
3.配置表输出文件
新建连接
连接名称con;连接类型 MySQL ;主机名称:localhost;数据库名称:studb;
然后是用户名和密码
点击测试
连接成功,然后点击确定。
目标表 student_cdc1,然后执行sql语句
4.然后保存,启动命令。然后在navicat中可以看到数据。
二.基于时间戳的源数据的CDC案例
1.创建cdc_time_log表,并添加数据。
2.转换的设计图
新建转换文件,并开始可视化编程
查询条件:{插入时间>上次执行时间 and 插入时间<=当前执行时间} or {更新时间>上次执行时间 and 更新时间<=当前执行时间}
3.步骤的配置
(1)命名参数配置 右键单击空白处,选择转换设置CTL_L,找到命名参数
命名参数:cur_time 默认值:2018-08-04
(2)CDC日志表输入配置
新建连接(同理),在SQL栏中输入以下语句
Select 上次执行时间 as last1,
“
c
u
r
t
i
m
e
”
a
s
c
u
r
1
,
上
次
执
行
时
间
a
s
l
a
s
t
2
,
“
{cur_time}” as cur1, 上次执行时间 as last2, “
curtime”ascur1,上次执行时间aslast2,“{cur_time}” as cur2,
From cdc_time_log
(3)学生表输入配置
先连接数据库,再在SQL栏中输入以下语句
SELECT
学号
, 姓名
, 性别
, 年龄
, 年级
, 成绩
, 身高
, 手机
, 插入时间
, 更新时间
,Date("${cur_time}") as 导入时间
FROM student_cdc1
where (插入时间>? and 插入时间<=?) or (更新时间>? and 更新时间<=?)
然后从步骤插入数据中选择:CDC日志表输入
(4)Excel输出配置
选择输出路径
然后再在“内容”选项卡中勾选“追加”。
(5)插入\更新配置
4.运行转换
值设为2018-08-06
然后数据如下:
三、基于自增序列的源数据的CDC案例
1.创建cdc_seq_log表,并插入数据
2.转换的设计图
3.步骤配置
(1).命名参数的配置
命名参数:cur_no ;默认值:1
(2).CDC日志文件输入
连接数据库,在SQL栏中输入以下语句
SELECT
上次执行序列
FROM cdc_seq_log
(3)学生表输入配置
连接数据库,在SQL栏中输入以下语句,并在步骤插入数据中选择:CDC日志表输入
SELECT
学号
, 姓名
, 性别
, 年龄
, 年级
, 成绩
, 身高
, 手机
, 插入时间
, 更新时间
,Curdate() as 导入时间
,Date("
c
u
r
n
o
"
)
a
s
当
前
学
号
F
R
O
M
s
t
u
d
e
n
t
c
d
c
1
w
h
e
r
e
学
号
>
?
a
n
d
学
号
<
=
{cur_no}") as 当前学号 FROM student_cdc1 where 学号>? and 学号<=
curno")as当前学号FROMstudentcdc1where学号>?and学号<={cur_no}
(4)学生表Excel输出
选择输出路径,内容选项卡勾选追加
(6)插入\更新配置
4.运行转换
值设置为2,然后保存运行,输出数据。成功!
四、基于触发器的CDC案例
1.基于INSERT触发器的CDC案例
(1)创建cdc_opt_log表,操作为”I”,处理标志为”未处理”,为student_cdc1创建触发器,在student_cdc1中插入一条数据后,将操作数据记入cdc_opt_log中。
(2)转换设计图
(3)参数配置
(i)CDC日志表输入配置
在SQL栏中输入以下语句
SELECT
学号
FROM cdc_opt_log
where 操作=“I” and 处理标志=“未处理”
(ii)学生表输入配置
在SQL栏中输入以下语句
SELECT
学号
, 姓名
, 性别
, 年龄
, 年级
, 成绩
, 身高
, 手机
, 插入时间
, 更新时间
,curdate() as 导入时间
,“已处理” as 处理标志
FROM student_cdc1
where 学号=?
(iii)插入学生同步表
目标表设置为student_cdc_sync,然后按图配置,然后执行SQL语句创建目标表
(iv)更新CDC日志表
最后运行转换,结果输出到目标表student_cdc_sync
2.基于UPDATE触发器的CDC案例
(1)创建触发器student_cdc_update,在student_cdc1中插入一条数据后,将操作数据记入cdc_opt_log中。
(3)转换设计图
(4)参数配置
(i)CDC文件配置
在SQL栏中输入以下语句
SELECT
学号
FROM cdc_opt_log
where 操作=“U” and 处理标志=“未处理”
(ii)学生表输入配置
在SQL栏中输入以下语句
SELECT
学号
, 姓名
, 性别
, 年龄
, 年级
, 成绩
, 身高
, 手机
, 插入时间
, 更新时间
,curdate() as 导入时间
,“已处理” as 处理标志
FROM student_cdc1
where 学号=?
从步骤插入数据选择:CDC日志表输入
(iii)更新学生同步表配置
目标表为student_cdc_sync
(iv)更新CDC日志表配置
目标表是cdc_opt_log
最后运行转换,
处理标志变为已处理
数据输出到student_cdc_sync表中
3.基于DELETE触发器的CDC案例
(1)创建触发器student_cdc_delete,在student_cdc1中插入一条数据后,将操作数据记入cdc_opt_log中。
Cdc_opt_log中的数据
(2)转换设计图
(3)步骤配置
(i)CDC日志表输入
在sql栏中输入以下语句
SELECT
学号
, “已处理” as 处理标志
FROM cdc_opt_log
where 操作=“D” and 处理标志=“未处理”
(ii)删除学生同步表
(iii)更新CDC日志表
(4)运行转换
cdc_opt_log数据如下,成功!