mysql增量抽取方法 增量抽取 時間戳方式實現

2021-10-17 21:17:21 字數 2337 閱讀 9122

----------時間戳方式抽取資料------------------------

介紹:它是一種基於快照比較的變化資料捕獲方式,在源表上增加乙個時間戳字段,系統中更新修改表資料的時候,同時修改時間戳字段的值。當進行資料抽取時,通過比較上次

抽取時間與時間戳字段的值來決定抽取那些資料。有的資料庫的時間戳支援自動更新,即表的其他欄位的資料發生變化時,自動更新時間戳字段。有的資料庫不支援時間戳的自動

更新,這就要求業務系統在更新業務資料時,手工更新時間戳字段。

一:在資料來源上增加乙個時間戳字段

時間戳:oracle提供了時間戳資料型別timestamp,將定義為時間戳資料型別的字段做查詢時,查詢到的結果為:18-4月 -10 03.31.06.000000 下午

這種格式不太符合我們的需要,用to_char函式把乙個日期資料轉換為任何乙個我們想要的格式。

to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')-----將時間戳型別轉換為字串型別

oracle還提供了一種日期型別date,也可以用to_char()轉換成自己想要的格式。

兩種型別都是對日期和時間的表示,只是兩種型別的精度不同,date精確到秒,而timestamp精確到小數秒,兩者格式化顯示都一樣。

to_char函式對兩種型別都支援,但是turnc函式不支援時間戳型別。

當兩個時間的差別極其重要時,使用時間戳型別要比日期型別更加精確。

兩個date型別相減的結果是以天為單位,而兩個時間戳型別相減的結果是直觀的顯示「多少天+多少小時+多少分鐘+多少秒+多少小數秒」;

例如:select to_timestamp('2018-11-11 12:12:12.23','yyyy-mm-dd hh24:mi:ss.ff')-to_timestamp('2018-10-11 12:12:12.23','yyyy-mm-dd hh24:mi:ss.ff') from dual

結果為:

查詢結果顯示(多少天 多少小時 多少分鐘 多少秒 多少小數秒 ):000000001 01:30:10.100000

date型別轉化為timestamp型別要使用cast函式:

select cast(sysdate as timestamp) from dual

二:新建time_test表

create table `time_test` (

`id` int(10) not null auto_increment,

`name` varchar(50) default null,

`age` int(3) default null,

`time_smp` timestamp null default null,

primary key (`id`)

) engine=innodb auto_increment=14 default charset=utf8;

三:新建觸發器

當插入資料時,預設給當前時間;

當修改資料時,時間戳更新為當前時間;

以上兩個觸發器都在源表基礎上做修改。

a:觸發器名稱tri_time_test_insert---插入

觸發器沒成tri_time_test_update---更新

b:觸發時間----都在觸發事件之後觸發

c:執行語句

插入後-------------------改變思路,將時間戳定義為預設值

--------------------------更新mysql表中的某一欄位,為其設定乙個預設值

alter table time_test alter column time_smp set default now();

d:觸發器沒成tri_time_test_update---更新

create  trigger tri_time_test_update after update

on `time_test` for each row

begin

set @point=(select name from `time_test` where id = old.id );

set @point02=(select age from `time_test` where id = old.id );

if @point != old.name then

update `time_test` set time_smp=now() where idc=old.id;

end if;

if @point02 != old.age then

update `time_test` set time_smp=now() where idc=old.id;

end if;

end

Kettle資料抽取 增量抽取

使用 kettle 實現資料的增量抽取的方法大致如下 從目標表中讀取最大的時間戳或者增量字段 id,作為條件,然後把源表中所有大於這個增量欄位的資料讀出來,插入到目標表當中去 1.開啟 kettle 工具,開啟新建的全量抽取流 2.選擇 input,再拖出來乙個 表輸入 控制項 開啟表輸入 2,配置...

增量資料抽取

a.觸發器 在要抽取的表上建立需要的觸發器,一般要建立插入 修改 刪除三個觸發器,每當源表中的資料發生變化,就被相應的觸發器將變化的資料寫入乙個臨時表,抽取執行緒從臨時表中抽取資料,臨時表中抽取過的資料被標記或刪除。觸發器方式的優點是資料抽取的效能較高,缺點是要求業務表建立觸發器,對業務系統有一定的...

ETL增量抽取方法講解

一 etl體系結構 資料庫 抽取 轉換 載入 目的資料來源 二 etl抽取方案 1 全量抽取 全量抽取類似於資料遷移或資料複製,它將資料來源中的表或檢視的資料原封不動的從資料庫中抽取出來,並轉換成自己的etl工具可以識別的格式,全量抽取比較簡單。全量抽取一般只在系統初始化時使用,全量一次後,就要每天...