1. 概述
1.1 版本
FineDataLink 版本 | 功能變動 |
---|---|
4.0.5 | - |
4.1.7.3 | 支援 HANA 作為寫入資料源 |
4.1.8.1 | 配置管道任務-選擇資料來源 步驟中生成的分組表,不支援 DDL |
4.1.8.2 | 管道任務支援寫入神通資料庫 |
4.1.11.2 | YMatrix 作為目標端時,支援無主鍵同步 |
4.1.11.5 | 若來源表支援主鍵,欄位映射預設選中來源表的主鍵和 Not Null |
1.2 更多歷史版本
FineDataLink 版本 | 功能變動 |
---|---|
4.0.6 | 支援 Mysql 作為寫入資料源 |
4.0.7 | 支援 SQL Server 作為寫入資料源 |
4.0.8 | 支援 GaussDB 200 作為寫入資料源 |
4.0.9 | 支援 Oracle 、PostgreSQL 作為寫入資料源 |
4.0.14 | 支援邏輯刪除和顯示資料儲存入庫時間戳 |
4.0.15 | 支援Greenplum、Greenplum(並行裝載)作為寫入資料源 |
4.0.17 | 支援Mysql 作為讀取和寫入資料源,設定同步源表結構變化 |
4.0.24 | 支援 StarRocks 作為寫入資料源 |
4.0.28 | 管道任務支援寫入至 TiDB 資料庫 管道任務支援寫入至 ClickHouse 管道任務支援寫入至Amazon Redshift |
4.0.29 | Greenplum、Greenplum(並行裝載)作為目標端同步優化:當資料透過COPY裝載失敗時,重新使用JDBC裝載,重新裝載再失敗時,識別為髒資料,並正常記錄,以保證資料正常 |
4.1.1 | 目標表來自 Oracle、GP、SQLServer 資料庫,支援無主鍵同步,詳情參見本文 3.5 節 |
4.1.3 | StarRocks 資料源作為寫入端支援批量刪除資料,大大提升同步效率 |
4.1.7.2 | 目標表選擇已存在表且已存在表包含「_fdl_marked_deleted」欄位時,支援使用源端邏輯刪除功能 |
目標表為已存在表&已存在表包含_fdl_update_timestamp欄位,支援「同步時標記時間戳」功能 |
1.3 功能簡介
「選擇去向」步驟中,需要設定實時同步資料要存放的位置、目標表是否追加時間戳欄位(資料變化時間)、來源端表結構變化,目標端是否跟隨變化等。如下圖所示:
2. 注意事項
資料管道使用 Greenplum 或者 Greenplum(並行裝載)作為目標表時,都是用的 COPY 裝載模式,需要在目標資料庫先建立 fdl_temp 模式用來存放臨時表,因此需要給該資料連結帳號賦予在對應資料庫建立模式的權限。詳情參見:配置Greenplum資料源
4.0.29 及之後版本,Greenplum、Greenplum(並行裝載)作為目標端同步優化:當資料透過COPY裝載失敗時,重新使用JDBC裝載,重新裝載再失敗時,識別為髒資料,並正常記錄,以保證資料正常。
3. 操作步驟
3.1 資料源&庫
設定實時同步資料要存放的位置。管道任務支援的目標端請參見:資料管道支援的資料源類型
目標資料表結構(表名和欄位名)和來源表一致:首次資料同步會清空目標資料表資料,然後全量同步資料,此後增量同步。
目標資料庫沒有和來源表一樣的資料表,則直接在目標資料庫建立資料表。
3.2 源端刪除資料
1)兩種方式說明如下:
目標端執行物理刪除:來源表刪除資料,目標表中也會直接刪除。
目標端執行邏輯刪除:來源表刪除資料,目標表將新增一個名稱為_fdl_marked_deleted的布林型欄位(欄位預設為false),用於記錄資料刪除狀態。來源資料表刪除了一筆資料,此時同步至目標表,目標表不進行物理刪除,而是將_fdl_marked_deleted欄位更新為 true 。
4.1.7.2 及之後版本,目標表選擇已存在表且已存在表包含「_fdl_marked_deleted」欄位時,支援使用源端邏輯刪除功能;4.1.7.2 及之後版本,若未開啟邏輯刪除&目標表為已存在表&目標表包含「_fdl_marked_deleted」欄位時,該欄位後續將傳空值。
若目標端執行「邏輯刪除」,說明如下:
目標表 | 邏輯刪除功能說明 |
---|---|
自動建表 | 目標表映射增加「_fdl_marked_deleted」欄位,同步時標記邏輯刪除 |
已存在表:目標表不包含_fdl_marked_deleted欄位 | 同步類型選擇存量+增量:目標表映射增加「_fdl_marked_deleted」欄位,同步時標記邏輯刪除 同步類型選擇僅增量同步:目標表映射增加「_fdl_marked_deleted」欄位,同步時將歷史資料「_fdl_marked_deleted」欄位值改為 false,併為新資料標記邏輯刪除 |
已存在表:目標表包含_fdl_marked_deleted欄位 | 同步類型選擇存量+增量:直接使用「_fdl_marked_deleted」欄位,同步時標記邏輯刪除 同步類型選擇僅增量同步:直接使用「_fdl_marked_deleted」欄位,同步時不處理歷史資料邏輯刪除欄位,為新資料標記邏輯刪除 |
2)需注意:
開啟邏輯刪除時,4.0.23 版本進行資料初始化全表更新,對目標端清表重寫,大大提升了資料同步效率。
如果後續有和目標表表中已存在主鍵相同的資料重新寫入,不插入新資料,而是更新該資料,並將之前已經標記為刪除的資料標記為未刪除。
GaussDB 資料庫及 PostgreSQL9.4 以下(含9.4)版本資料庫,不支援「目標端執行邏輯刪除」。
3.3 同步時標記時間戳
勾選「同步時標記時間戳」按鈕,所有目標表將新增一個名稱為_fdl_update_timestamp的長整數型態欄位,以毫秒級時間戳的形式記錄資料在資料庫中實際新增和更新的時間(資料庫所在時間)。
需注意:
勾選「目標端執行邏輯刪除」和「同步時標記時間戳」後預設作用在該管道任務的所有資料表,不支援僅設定管道任務中的一張表。
時間戳同步在資料完全同步後執行。若資料量較大,資料同步程式中時間戳可能暫時為空。
若開啟「同步時標記時間戳」,說明如下:
目標表 | 說明 | |
---|---|---|
自動建表 | 目標表映射增加「_fdl_update_timestamp」欄位,同步時傳入時間戳 | |
已存在表 - 目標表沒有「_fdl_update_timestamp」欄位 | 同步類型選擇存量+增量:目標表映射增加「_fdl_update_timestamp」欄位,同步時傳入時間戳 同步類型選擇僅增量同步:目標表映射增加「_fdl_update_timestamp」欄位,同步時補齊歷史資料時間戳,併為新資料傳入時間戳 | |
已存在表 - 目標表包含「_fdl_update_timestamp」欄位 4.1.7.2 及之後版本支援 | 同步類型選擇存量+增量:直接使用「_fdl_update_timestamp」欄位,同步時傳入時間戳 同步類型選擇僅增量同步:直接使用「_fdl_update_timestamp」欄位,同步時不處理歷史資料時間戳,為新資料傳入時間戳 |
若未開啟「同步時標記時間戳」&目標表包含「_fdl_update_timestamp」欄位,該欄位後續將傳空值。
範例:
管道任務中勾選了「同步時標記時間戳」、選擇目標端執行邏輯刪除,如果來源資料庫資料表「S訂單」中刪除了一條訂單 ID 為 10257 的資料,如下圖所示:
在目標資料表中,訂單 ID 為 10257 的資料不會被刪除,而是將對應「_fdl_marked_deleted」欄位修改為 true,同時「_fdl_update_timestamp」欄位時間戳修改為刪除欄位的時間戳,如下圖所示:
注:「目標端執行邏輯刪除」、「同步時標記時間戳」功能僅在管道任務建立和暫存狀態時可進行配置,運作中、暫停狀態的任務不允許調整配置。
3.4 同步源表結構變化
在使用管道任務進行資料實時同步程式中,源端表結構可能因業務調整等原因發生變動,如增刪表、增刪欄位、修改欄位名稱、修改欄位類型等,此時希望在目標側的表可以自動同步這些源端的調整。
詳情參見:同步源表结构变化
注:选择数据来源 步驟中配置的分組表,不支援「同步源表結構變化」功能。
若未開啟「同步源表結構變化」,則若來源資料結構發生了變化,管道任務執行方式如下所示:
操作 | 「關閉」同步源表結構變化 | 欄位映射配置變化 | 目標表結構變化 | 目標表資料變化 |
---|---|---|---|---|
刪除表 | 繼續同步其他表。 | 無變化。 | 無變化,修改全部忽略。 | 被刪除表在後續同步中將沒有新資料寫入。 |
重新命名錶 | 原名稱對應的表刪除,繼續同步其他表。 | 原名稱表在後續同步中將沒有新資料寫入。 | ||
刪除欄位 | 繼續同步其他欄位。 | 被刪除欄位在後續同步中傳NULL值。 | ||
新增欄位 | 忽略新增欄位,繼續同步其他欄位。 | 無變化,仍然按照原來的欄位配置情況進行同步。 | ||
修改欄位名稱 | 識別為原名稱表欄位刪除,同刪除欄位邏輯。 | 被重新命名欄位在後續同步中傳NULL值。 | ||
修改欄位類型 | 忽略類型同步,如果類型不匹配,作為髒資料處理。 | 無變化,仍然按照原來的欄位配置情況進行同步。 |
3.5 設定無主鍵同步
若某些資料源的業務表沒有主鍵,使用者也不知道這些表作為來源表該標記什麼欄位作為邏輯主鍵。此時對無主鍵的表,無需標記邏輯主鍵,也可以實現資料的實時同步。
需要注意的是,勾選了無主鍵同步後,在管道進行資料同步時,會自動使用目標表所有可用欄位作為邏輯主鍵並配置到任務中,並使用邏輯主鍵作為更新和刪除時的比對欄位。
即將目標表所有能進行比對的欄位都用來比對,但是不區分源端對完全相同資料中部分資料的操作。
對於目標端的主鍵設定和同步邏輯請參見:目標端主鍵設定邏輯
4.1.1 及之後版本,「選擇去向」步驟中,資料源為 Oracle/GP/SQLServer 資料庫時,支援無主鍵同步;4.1.11.2 及之後版本,「選擇去向」步驟中,資料源為 YMatrix 資料庫時,支援無主鍵同步。
勾選「無主鍵同步」,如下圖所示:
場景說明:
源端有 5 條相同資料,第一次啟動目標端也會有 5 條相同資料。
源端相同資料刪除其中一條、多條,目標端都是全部刪除。
源端相同資料再增加相同的一條或多筆資料,目標端資料無變化。
源端多條相同資料只修改一其中條,目標端相同資料全部修改。
源端多條相同資料修改多條,按照改動順序,源端第一次修改的資料,目標端對應的那個欄位也全部同時修改;之後修改的資料,按照最新資料新增。
若該步驟設定了同步源表結構變化,則:
欄位新增:與其他 DDL 相同,目標欄位新增,新增的這個欄位不標記物理主鍵或邏輯主鍵。
欄位刪除:如果刪除欄位在目標側對應是邏輯主鍵,任務將報錯終止。
如果刪除欄位在目標側對應是物理主鍵,由於此時資料同步將一直違反主鍵非空的規則,故將任務報錯中止。