最新历史版本 :資料同步-寫入方式 返回文檔
編輯時間: 內容長度:图片数:目录数: 修改原因:

目錄:

1. 概述编辑

1.1 版本

FineDataLink版本
功能說明
4.0.181)移除了「比對欄位」

2)寫入方式「直接將資料寫入目標表」,更新為「追加寫入資料」

4.0.28
  • 調整「寫入方式」和「欄位映射」的順序

  • 寫入方式優化,分為三種:直接將資料寫入目標表清空目標表,再寫入資料基於標識欄位,追加/更新/刪除資料

4.0.29
  • 主鍵沖突策略中主鍵相同,停止寫入並報錯修改為主鍵相同,記錄為髒數

  • 寫入方式為「清空目標表,再寫入資料」時邏輯優化

4.1.9.1寫入方式基於標識欄位,追加/更新/刪除資料修改為「基於標識欄位,新增/修改/刪除資料」
4.2.7.4
  • 新增「交易控制」功能

  • 寫入方式選擇「清空目標表,再寫入資料」時,新增清表方式和主鍵沖突策略

  • 寫入方式選擇直接將資料寫入目標表」時,主鍵沖突策略名稱更新

4.2.8.5目標端為KingBaseES(SqlServer模式)、KingBaseES(MySQL模式)時,支援「交易控制」功能
4.2.12.2 目標端為 Doris、SelectDB 時,支援「交易控制」功能
4.2.12.4目標端為 KingBaseES(Oracle模式)、KingBaseES(PostgreSQL模式)時,支援「交易控制」功能
4.2.17.1

原「清表方式」更名為「執行方式」

寫入 Doris、SelectDB 、StarRocks 時,新增「INSERT OVERWRITE」執行方式

執行方式更名為:TRUNCATE + WRITE、DELETE + WRITE


1.2 功能簡介

本文介紹「資料同步」設定寫入方式或者使用「資料轉換-DB表匯出」設定寫入方式時配置項說明。

1.2.1 寫入方式

「寫入方式」介面如下圖所示:

寫入方式有三種:

注:部分資料源支援分割槽寫入。詳情請參見:讀取、建立、寫入分割槽表


寫入方式
說明效果範例
直接將資料寫入目標表目標表無物理主鍵且未配置邏輯主鍵映射:直接將資料寫入目標表不同寫入方式效果說明

目標表有物理主鍵或已配置邏輯主鍵映射:基於主鍵比對資料行的差異:主鍵相同、主鍵不同

1)主鍵不同的資料行:追加寫入

2)主鍵相同的資料行,提供三種寫入策略:

  • 更新資料:主鍵相同時更新資料,新資料行改寫舊資料行

  • 記為髒資料:主鍵相同時記為髒資料,衝突的資料行不寫入

  • 忽略衝突:主鍵相同時忽略衝突,衝突的資料行不寫入


清空目標表,再寫入資料

1)提供兩種清表方式:

TRUNCATE:直接清空表資料,速度較快,無資料刪除記錄

DELETE:逐行刪除表資料,速度一般,有資料刪除記錄

2)支援配置主鍵衝突策略,避免鎖表情況

注:目標端為 SelectDB、Doris 時,僅支援 TRUNCATE 清表方式

基於標識欄位,新增/修改/刪除資料

1)目標表無物理主鍵:寫入方式中勾選了「更新」或「刪除」時,「主鍵映射」處不允許為空,需設定邏輯主鍵

2)目標表有物理主鍵或已配置邏輯主鍵映射,識別資料行的標識:相同、新增、修改、刪除:

  • 新增的資料行:新增

  • 修改的資料行:更新

  • 刪除的資料行:刪除


1.2.2 交易控制

  • 定時任務寫入資料庫時支援失敗回滾,即任務執行失敗後不會對目標表產生影響。

  • 定時任務寫入資料庫時支援前置處理和後置處理,並支援將這些處理邏輯與核心寫入操作一起封裝為交易,一同支援失敗回滾。

2. 寫入方式說明编辑


2.1 直接將資料寫入目標表

2.1.1 主鍵映射

建立「來源端-目標端」的資料行對應關係,設定步驟如下圖所示:

1)目標表中若存在物理主鍵/自動建表配置了主鍵,將直接根據目標表物理主鍵,自動生成主鍵映射行以確定資料唯一性。

2)目標表中若無物理主鍵:

  • 目標表是自動建表生成的:自動建表時,在「欄位映射」處可以手動設定單個或多個欄位為物理主鍵。

  • 目標表是已存在表:「主鍵映射」處,選擇欄位作為邏輯主鍵映射以確定資料唯一性,若為空則直接追加寫入資料。

2.1.2 主鍵衝突策略

注:目標端為 Hive 時,不支援「主鍵衝突策略」。

1750839755346161_fixed.jpeg

滿足以下任一條件,需要選擇「主鍵衝突策略」:

  • 目標表存在物理主鍵。

  • 目標表不存在物理主鍵,但配置了邏輯主鍵。

主鍵衝突策略有三種:

  • 更新資料:主鍵相同時更新資料,新資料行改寫舊資料行。

  • 記為髒資料:主鍵相同時記為髒資料,衝突的資料行不寫入。

  • 忽略衝突:主鍵相同時忽略衝突,衝突的資料行不寫入。

2.2 清空目標表,再寫入資料

目標端為簡道雲時,請參見:簡道雲匯出算子

2.2.1 4.2.7.4 之前版本

具體說明請參見:歷史文檔

2.2.3 4.2.17.1 及之後版本

設定項
說明
執行方式

4.2.17.1 及之後版本,原「清表方式」更名為「執行方式」,並新增「INSERT OVERWRITE」執行方式

執行方式
說明
INSERT OVERWRITE
  • 僅寫入 Doris、SelectDB 、StarRocks 時,才支援此執行方

  • 執行時,將改寫表中資料並寫入新資料,具備交易特性,速度較快,無資料改寫記錄

  • 若選擇此方式,不支援開啟交易控制(該執行方式已具備交易特性,因此無需開啟交易控制),不支援配置主鍵映射和主鍵衝突策略

TRUNCATE+WRITE
  • 執行時,將清空表資料,隨後寫入新資料,速度較快,無資料刪除記

  • 建議結合交易控制使用,但部分資料庫 TRUNCATE 文法不支援交易控制

  • 支援配置主鍵映射和主鍵衝突策略

DELETE+WRITE
  • 執行時,將逐行刪除表資料,隨後寫入新資料,速度一般,有資料刪除記

  • 建議結合交易控制使用,但部分資料庫 TRUNCATE 文法不支援交易控制 

  • 支援配置主鍵映射和主鍵衝突策略


主鍵映射
  • 當目標表存在物理主鍵時,則從配置的欄位映射中,自動選擇物理主鍵映射鍵入,且不可修改

  • 若目標表不存在物理主鍵,則由使用者從配置好的欄位映射關係中,選擇邏輯主鍵映射

主鍵衝突策略

當來源表無主鍵,目標表有主鍵時,資料寫入目標表時依然會存在主鍵衝突情況,所以需要設定主鍵衝突策

  • 更新資料:主鍵相同時更新資料,新資料行改寫舊資料行

  • 記為髒資料:主鍵相同時記為髒資料,衝突的資料行不寫入

  • 忽略衝突:主鍵相同時忽略衝突,衝突的資料行不寫入

2.3 基於標識欄位,新增/修改/刪除資料

2.3.1 功能說明

注1:目標端為 Hive 時,不支援該寫入方式。

注2:新增/更新/刪除可勾選任意一個或多個。

寫入方式:

寫入方式勾選「刪除」時,可選擇物理刪除/邏輯刪除:

  • 邏輯刪除:不實際刪除資料,標記刪除資料。

  • 物理刪除:實際刪除資料。

兩種刪除方式的具體效果可參見:物理刪除和邏輯刪除的差別

標識欄位/標識值:

1)透過標識欄位和標識值篩選出需要新增/更新/刪除的資料。

2)若使用「資料比對+DB表匯出算子」實現資料的處理,「DB表匯出」算子中的標識欄位則自動讀取 fdl_comparison_type 作為標識欄位,且自動讀取標識欄位的值作為標識值。

3)表匯出只選擇新增/更新/刪除其中一個時,「標識欄位」可不填,不填則對讀取的所有資料進行新增或更新或刪除。

主鍵映射:

詳情請參考本文 2.1 節說明。

1)出現條件:寫入方式中勾選了「更新」或「刪除」。

2)寫入方式中勾選了「更新」或「刪除」時,「主鍵映射」處不允許為空。

2.3.2 最佳實踐

1)通常資料比對+DB 表匯出結合使用,詳情參見:資料比對典型範例

2)單個資料同步節點使用場景:

  • 使用者希望將篩選出的資料,只做新增/更新/刪除操作。

  • 使用者資料已經有了標識欄位和標識值,需要對資料進行新增/更新/刪除操作。

詳情請參見:資料同步-基於標識欄位,新增/更新/刪除資料

3. 交易控制编辑

3.1 應用場景

1)使用者在定時同步向目標庫寫入資料時,希望可以將單次當前來源端的所有資料,放到同一個交易內裝載:

  • 要麼都成功,正常提交交易,更改目標表資料。

  • 要麼都失敗,交易回滾,對目標表不產生影響。

2)在定時任務同步完成後,可以將當次寫入的統計資料寫到自訂的表中,以方便後續校驗資料。

3.2 使用限制

1)支援使用「交易控制」的資料源:

版本
新增支援的資料源
4.2.7.4 目標端為 Oracle、Greenplum、MySQL、SQL Server、PostgreSQL
4.2.8.5目標端為 KingBaseES(SqlServer模式)、KingBaseES(MySQL模式)
4.2.12.2目標端為 Doris、SelectDB
4.2.12.4目標端為 KingBaseES(Oracle模式)、KingBaseES(PostgreSQL模式)

2)當寫入方式選擇「清空目標表,再寫入資料」時:

  • 清表方式為 TRUNCATE+WRITE 時,只有 PostgreSQL、Greenplum 支援使用「交易控制」功能。

  • 清表方式為 DELETE+WRITE  時,支援交易控制的資料庫,均支援開啟「寫入交易控制」。(Doris、SelectDB 本身並不支援 DELETE 清表方式)

3)Doris、SelectDB 的交易控制僅支援 INSERT INTO SELECT、UPDATE、DELETE 語句,因此開啟「交易控制」功能後,自訂前/後置 SQL 執行其他語句會報錯。


3.3 功能說明

定時任務寫入資料庫時支援前置處理和後置處理,並支援將這些處理邏輯與核心寫入操作一起封裝為交易,一同支援失敗回滾。介面如下圖所示:


交易控制配置項如下所示:

若來源端選擇了並行取數 ,去向端開啟「交易控制,預設進行並行取數。

交易控制功能範例請參見:交易控制範例

功能
說明
前置 SQL 

1)應用場景:

  • 刪除目標表中XX時間段內的資料,刪除後,再進行寫入

  • 做裝載前檢查, 檢查中間表資料是否有異常

2)支援使用「@temp_tbl_nm_full」引用裝載時使用的中間表名,可以使用此參數定義SQL查詢,其他交易中引用此表名參數時,值為空字串

後置 SQL 1)應用場景:使用「後置SQL」做裝載後檢查,檢查最終結果是否有異常;或者來記錄增量時間戳,還可以用來統計表中的總/新增資料量,以及記錄 etl 完成時間

2)支援使用「@temp_tbl_nm_full」引用裝載時使用的中間表名,可以使用此參數定義SQL查詢,其他交易中引用此表名參數時,值為空字串

主鍵衝突策略

開啟「交易控制」按鈕後,或者目標端為 Gbase 8A 時,主鍵衝突策略只能選擇:

  • 更新資料:主鍵相同時更新資料,新資料行改寫舊資料行

  • 運作報錯:主鍵相同時記為髒資料,衝突的資料行不寫入

支援使用的參數:

參數說明
@temp_tbl_nm_full帶有引號和完整SCHEMA的中間表名
@temp_schema_nm無引號的中間SCHEMA名
@temp_tbl_nm 無引號的中間表名
@target_tbl_nm_full 帶有引號和完整SCHEMA的目標表名
@target_schema_nm無引號的目標SCHEMA名
@target_tbl_nm 無引號的目標表名

4. 注意事項编辑

比如來源表和目標表都有 D 列的部分資料為 NULL:

設定「寫入方式」為追加寫入且 A、B、C、D 都是邏輯主鍵,如下圖所示:

此時運作結果為若 D 列不為 NULL,則改寫目標表資料,若有一欄,此處為 D 列為 NULL,則不會遵循改寫邏輯,會追加寫入。