在Kettle裡使用快照實現變化資料捕獲(CDC)

2021-07-25 15:21:14 字數 2832 閱讀 9051

1. 建立測試表,插入資料。

use test;    

create table t_color (

id int unsigned not null auto_increment primary key,

color varchar(10)

) engine=myisam;

insert into t_color (color) values('black'),('green'),('red'),('blue');

select * from t_color;

2. 建立快照表。

use test;   

create table t_color_stg engine=myisam as select * from t_color ;

select * from t_color_stg;

3. 建立目標表。

use test;   

create table dim_color engine=myisam as select * from t_color ;

select * from dim_color;

4. 建立基於快照的cdc轉換

說明:5. 測試

-- 執行轉換

-- 檢視dim_color表

mysql> select * from dim_color;

+----+--------+

| id | color  |

+----+--------+

|  1 | black  |

|  2 | green  |

|  3 | red    |

|  4 | blue   |

+----+--------+

4 rows in set (0.00 sec)

-- 修改資料

delete from t_color where id=3;

update t_color set color='grey' where id=1;

insert into t_color (color) values('yellow');

-- 執行轉換

-- 檢視dim_color表

mysql> select * from dim_color;

+----+--------+

| id | color  |

+----+--------+

|  1 | grey   |

|  2 | green  |

|  5 | yellow |

|  4 | blue   |

+----+--------+

4 rows in set (0.00 sec)

6. 總結

比較的sql語句如下:

select 'u' as flag, t2.id as id, t2.color as color  

from t_color_stg t1 inner join t_color t2 on t1.id = t2.id

where t1.color != t2.color

union all

select 'd' as flag, t1.id as id, t1.color as color

from t_color_stg t1 left join t_color t2 on t1.id = t2.id

where t2.id is null

union all

select 'i' as flag, t2.id as id, t2.color as color

from t_color as t2 left join t_color_stg as t1 on t2.id = t1.id

where t1.id is null;

結果如下:

+------+----+--------+

| flag | id | color  |

+------+----+--------+

| u    |  1 | grey   |

| d    |  3 | red    |

| i    |  5 | yellow |

+------+----+--------+

3 rows in set (0.00 sec)

利用oracle快照實現兩台資料庫伺服器表同步

利用oracle快照實現兩台資料庫伺服器表同步。舉例,如源資料庫a,目標資料庫b,資料庫b需要同步資料庫a的表cross,具體步驟如下 1 首先在資料庫b中建立dblink create database link create database link db link test connect ...

在kettle使用迴圈來處理表中的資料

有時候,如果kettle事務中源表的資料非常大的時候,一下子把源表中的資料全部讀入記憶體的方式是不可取的。在mysql中,我們可以通過迴圈的方式,使用limit來定量取得一部分資料來處理。即,關鍵的sql是 select from table name limit current value,ste...

sphinx在php檔案裡使用及返回資料的格式

引入sphinx搜尋類檔案 require sphinxapi.php 例項化sphinx搜尋類 cl new sphinxclient 連線伺服器,埠 cl setserver 192.168.1.250 9312 超時時間3秒,3秒連不上放棄 cl setconnecttimeout 3 是以陣...