資料管道-同步源表結構變化

  • 文档创建者:Roxy
  • 历史版本:48
  • 最近更新:Nikozhan 于 2025-03-07
  • 1. 概述

    1.1 版本

     FineDataLink 版本
    功能變動
    4.0.17支援Mysql 設定同步源表結構變化
    4.1.8.2資料管道支援寫入神通資料庫,該資料庫支援DDL
    4.1.9.3
    • 支援使用者自訂欄位類型映射規則,並配置生效的資料連結。

    • 「自動建表欄位類型映射」、「管道DDL」、「定時任務來源欄位變化感知」時,資料連結的自訂映射規則將優先於預設映射規則生效。

    詳情參見:通用配置-欄位映射規則

    4.1.10.1StarRocks、Doris作為目標端時,支援 DDL
    4.1.11.2YMatrix 作為目標端時,支援 DDL
    4.1.11.3PolarDB PostgreSQL 作為目標端時,支援 DDL

    1.2 歷史版本更新

     FineDataLink 版本功能變動
    4.0.20.1支援SQL Server、Oracle 、GaussDB 200、PostgreSQL、Greenplum、Greenplum(並行裝載)作為目標端設定同步源表結構變化
    4.0.21Oracle資料源作為來源端,適配同步源表結構變化
    4.0.27交互體驗優化
    4.0.28支援TiDB、Amazon Redshift、SeaboxMPP 作為目標端的DDL
    4.0.29支援 PostgreSQL 作為來源端的 DDL
    4.1.1支援 SQL Server 作為來源端的 DDL,DDL 邏輯詳情參見本文3.3 節表格,且目前 DDL 同步不支援自動同步源端新增欄位,若需要使用 DDL 進行新增欄位的處理,請參見本文第四章
    4.1.5.4若開啟 DDL,源表欄位注釋的變化(增刪改)會同步到目標表中。但新增欄位的注釋不會同步過去

    1.3 應用場景

    在使用管道任務進行資料實時同步程式中,來源端結構可能因業務調整等原因發生變動,如增刪表、增刪欄位、修改欄位名稱、修改欄位類型等,此時,使用者希望目標端可以自動同步這些來源端的調整,不需要人為地進行資料表的調整。

    1.4 功能說明

    資料管道任務支援同步源庫DDL功能,開啟相關選項後,在源庫發生DDL(刪除表、新增欄位、刪除欄位、修改欄位名稱、修改欄位類型(長度修改 & 相容類型修改))時,管道任務可以自動同步這些來源端變化至目標端,不需人為介入修改目標表結構。

    2. 支援範圍

    管道任務的來源端和目標端,在下表中都為支援,才能正常使用 DDL 功能。

    例如:管道任務來源端為 MySQL,目標端為 SQL Server ,支援使用 DDL 功能;來源端為 MySQL,目標端為 DB2 ,不支援使用 DDL 功能。

    資料源
    作為來源端作為目標端備註
    MySQL 支援支援
    Oracle 支援
    支援
    SQL Server 



    支援由於 SQL Server 資料庫本身特性,目前 DDL 同步不支援自動同步源端新增欄位,若需要使用 DDL 進行新增欄位的處理,請參見本文第四章
    GaussDB 200 不支援支援
    PostgreSQL 支援支援
    Greenplum 包括並行裝載不支援支援


    kafka不支援不支援(目標端暫不支援kafka)
    TiDB不支援(來源端暫不支援TiDB)支援
    Amazon Redshift不支援(來源端暫不支援Amazon Redshift)支援
    DB2支援不支援
    SeaboxMPP不支援(來源端暫不支援SeaboxMPP)支援
    SAP HANA不支援不支援
    神通資料庫不支援支援
    StarRocks不支援支援源端修改列類型,StarRocks 和 Doris 存在限制,詳情請參見:StarRocks資料源使用說明Doris資料源使用說明
    Doris不支援支援
    YMatrix不支援支援
    PolarDB PostgreSQL不支援支援

    3. 操作步驟

    注:此步驟為非 SQL Server 資料庫的 DDL 操作,若需要使用 SQL Server 進行 DDL 則需要對資料庫進行操作,詳情參見本文第四章。

    範例以 MySQL 資料同步至 MySQL 資料庫為例。

    將 demo1 資料庫中的「出入庫資訊」、「DEMO_PRODUCT」、「CUSTOMER」資料表實時同步至 demotest 資料庫中。

    CUSTOMER.xlsDEMO_PRODUCT.xls出入库信息.xls

    3.1 配置資料管道任務

    3.1.1 準備工作

    在 FDL 中配置管道任務前,需要準備一個獨立部署的 FDL 工程、工程註冊管道相關功能點、準備資料源、準備資料庫環境、部署Kafka、配置傳輸佇列、分配管道任務權限(選做)。

    詳情請參見:資料管道使用說明

    3.1.2 選擇來源

    1)在有權限的資料夾下,建立管道任務。

    2)在「選擇來源」步驟中,選擇資料源為 MySQL,同步類型選擇存量+增量同步,同步物件選擇需要同步的資料表。如下圖所示:

    3)點選「下一步」按鈕。

    3.1.3 資料去向

    1)設定資料去向的資料源為 MySQL ,資料庫為 demotest ,設定目標端執行物理刪除,開啟「同步時標記時間戳」按鈕、「同步源表結構變化」按鈕。如下圖所示:

    2)點選下一步按鈕。

    3.1.4 表欄位映射

    1)目標表選擇自動建表,若目標資料庫中已有同名表,需要修改表名;設定表欄位的映射關係、為目標表設定主鍵。如下圖所示:

    2)點選下一步按鈕。

    3.1.5 管道控制

    1)本文範例,該步驟預設即可,點選儲存並啟動按鈕,如下圖所示:

    注:管道控制詳細介紹請參見:配置管道任務-管道控制

    2)管道任務啟動後,介面如下圖所示:

    3.2 來源端資料變化

    1)「出入庫資訊」表中新增了「狀態」欄位、修改「種類」欄位為「商品種類」、刪除了「期初庫存」欄位。如下圖所示:

    2)新增一筆資料,如下圖所示:

    9.png

    3.3 目標端同步結果

    查看「出入庫資訊」目標端資料「出入庫資訊_1」:

    • 新增欄位:新增欄位同步後續新增的資料(狀態欄位同步新增資料)。

    • 刪除欄位:被刪除欄位在後續同步中傳NULL值(期初庫存欄位同步NULL 值)。

    • 修改欄位名稱:原名稱欄位在後續同步中傳NULL值,同步新名稱欄位的後續新增資料(種類欄位修改為商品種類後,種類欄位停止同步,商品種類欄位繼續同步新增資料)。

    同時在「表欄位映射」中會對修改進行標記,如下圖所示:

    開啟「同步源表結構變化」後,資料結構變化實時同步說明:

    操作
    「開啟」同步源表結構變化
    欄位映射配置變化
    目標表結構變化
    目標表資料變化
    刪除表繼續同步其他表。

    標記被刪除的同步表。

    該表對應源表已被刪除,該表將不會繼續同步。

    無變化。被刪除表在後續同步中將沒有新資料寫入。

    重新命名錶


    繼續同步其他表。

    注:PostgreSQL 作為來源端,不支援重新命名錶。


    標記原名稱表為刪除。

    該表對應源表已被刪除,該表將不會繼續同步。

    無變化。

    原名稱表在後續同步中將沒有新資料寫入。


    刪除欄位

    繼續同步其他欄位。



    標記被刪除的欄位。

    對應源欄位已被刪除,該欄位在後續同步中將傳NULL值。

    無變化。

    被刪除欄位在後續同步中傳NULL值。

    對於 SQLServer 資料源作為來源端,在檢查到欄位刪除的時刻(每次查詢都會比對錶結構檢查),FDL 就會當做欄位已經刪除。

    此時 CDC 表中可能還存在一部分資料帶有這個欄位,此時該欄位的值將不會同步到目標表中。

    新增欄位

    自動同步新增欄位。

    同步失敗時,記錄日誌且傳送通知,任務正常運作。

    對於 SQLServer 資料源作為來源端,目前DDL同步不支援自動同步源端新增欄位,若需要進行新增欄位 DDL ,需要對資料庫進行操作,詳情參見本文第四章。


    自動在來源端和目標端新增新的映射關係。

    同步新增欄位。

    新增的這個欄位不標記物理主鍵或邏輯主鍵

    同步新增欄位的後續新增資料。


    修改欄位名稱

    原名稱欄位刪除,新名稱欄位新增。

    對於 SQLServer 、DB2資料源作為來源端,不支援修改欄位名稱。

    標記原名稱欄位刪除。

    自動在來源端和目標端新增新名稱欄位的映射關係。

    同步新增新名稱欄位。

    原名稱欄位在後續同步中傳NULL值。

    同步新名稱欄位的後續新增資料。

    修改欄位類型或者長度

    自動同步修改欄位類型,修改不成功時,記錄日誌,任務繼續運作。修改時的欄位映射邏輯和自動建表時一致。

    來源表與目標表欄位配置自動修改欄位類型。同步修改欄位類型。歷史資料與後續新增資料變化為對應類型資料。
    源表欄位註釋的變化(增刪改)

    同步到目標表

    新增欄位的註釋不會同步過去

    ---

    3.4 任務管理

    「運作日誌」介面會出現 DDL 的更改日誌,如下圖所示:

    1717555923740648.png

    4. SQL Server DDL 操作說明

    4.1 新增欄位

    對於 SQLServer 資料源,目前 DDL 同步不支援自動同步源端新增欄位,若需要使用 DDL 進行新增欄位的處理,請參見下文提供的方案。

    4.1.1 線上方案

    注:此方案如果源表在不停寫入資料,源表新增欄位之後,沒有立刻建立新的 CDC 實體,那麼在源表新增欄位之後到新的 CDC 實體建立前的這段時間中,源表發生的資料修改是不會寫入到新的 CDC 實體中的。這可能會導致部分資料丟失新增欄位的資料,如果要完全避免這種情況,請採用離線處理方案。

    1)源表執行 DDL,新增一個欄位。

    1717558786684677.png

    2)給源表建立一個 Capture Instance

    使用命令:

    EXEC sys.sp_cdc_enable_table
         @source_schema = N'Schema',
         @source_name = N'Table',
         @role_name = NULL, -- 如果要限制讀取角色,可能需要設定
         @capture_instance = N'Schema_Table_newname'; -- 給一個新的名稱

    注:Table 是資料表的名稱(沒有 schema

    3)等待 FineDataLink 檢查到新的 Capture Instance 建立後,自動切換到新的 Capture Instance

    即可看到目標表中已經同步新增的欄位,如下圖所示:

    14.png

    4)可以手動把舊的 Capture Instance 刪除。

    檢查 change_tables 中舊的 Capture Instance 名稱:

    USE database;
    GO

    EXECUTE sys.sp_cdc_help_change_data_capture;
    GO

    然後禁用該 Capture Instance ,範例命令:

    -- Disable a Capture Instance for a table
        EXEC sys.sp_cdc_disable_table
        @source_schema = N'Schema',
        @source_name   = N'Table',
        @capture_instance = N'Schema_Table'

    注:Table 是資料表的名稱(沒有 schema );Schema_Table 為需要刪除的舊 Capture Instance 。

    然後使用如下命令檢查 change_tables 裏是否有這條記錄,若沒有則表示已經被刪除,若有的話需要手動使用 SQL 命令刪除。

    USE database;
    GO

    EXECUTE sys.sp_cdc_help_change_data_capture;
    GO

    4.1.2 離線處理方案

    1)源錶停止寫入,等待 FineDataLink 同步完源表所有的資料。

    2)停止管道任務。

    3)源表執行 DDL,新增一個欄位:

    1717558994572766.png

    4)給源表建立一個 Capture Instance

    使用命令:

    EXEC sys.sp_cdc_enable_table
         @source_schema = N'Schema',
         @source_name = N'Table',
         @role_name = NULL, -- 如果要限制讀取角色,可能需要設定
         @capture_instance = N'Schema_Table_newname'; -- 給一個新的名稱

    5)恢復源表寫入。

    6)啟動管道任務。

    7)等待 FineDataLink 檢查到新的 Capture Instance 建立後,自動切換到新的 Capture Instance

    即可看到目標表中已經同步新增的欄位,如下圖所示:

    14.png

    8)可以手動刪除舊的 Capture Instance。

    注:如果沒有按照正確順序操作,可能造成部分有新欄位的資料流入了舊的 CDC 實體,那麼這部分新欄位的資料就丟失了。

    5. SAP HANA DDL 操作

    SAP HANA 作為資料源時,程式無法感知到源表結構變化,因此需要使用者手動有計劃地執行表結構變更等操作,才能完成同步。

    5.1 新增欄位

    • 正在運作的管道任務,資料表新增了欄位,且需要同步新增欄位。

    停止源表寫入,然後暫停 FineDataLink 管道任務。

    進入管道任務編輯介面,移除任務中新增欄位的表並儲存任務,如下圖所示:

    在源表和目標表新增欄位,如下圖所示:

    1717569548407621.png

    重新在FineDataLink 任務中新增表,選擇已存在表,如下圖所示:

    儲存並運作任務,恢復源表寫入。

    • 不需要同步新增欄位:僅需要新增源表欄位,不需要其他操作。

    5.2 刪除欄位

    停止源表寫入,然後暫停 FineDataLink 管道任務。

    移除任務中刪除欄位的表並儲存任務。

    在源表和目標表刪除欄位,重新在FineDataLink 任務中新增表,選擇已存在表。

    儲存並運作任務,恢復源表寫入。

    與 5.1 節新增欄位同理,不贅述。

    5.3 修改欄位類型或長度

    停止源表寫入,然後暫停 FineDataLink 管道任務。

    同時在源表、目標表調整欄位類型和長度,

    源表修改欄位類型命令實體:

    ALTER TABLE "FDL_ROXY"."dingdan" ALTER ("CREATETIME" NVARCHAR (255) NULL);

    啟動任務,恢復源表寫入。

    5.4 修改欄位名

    停止源表寫入,然後暫停 FineDataLink 管道任務。

    移除任務中改欄位名的表並儲存任務。

    在源表和目標表修改欄位名。

    重新在FineDataLink 任務中新增表,

    儲存並運作任務,恢復源表寫入。

    與 5.1 節新增欄位同理,不贅述。




    附件列表


    主题: 資料管道
    已经是第一篇
    已经是最后一篇
    • 有帮助
    • 没帮助
    • 只是浏览
    • 评价文档,奖励 1 ~ 100 随机 F 豆!