1. 概述
1.1 版本
FineDataLink版本 | 功能說明 |
---|---|
- | - |
4.0.18 | 1)移除了「比對欄位」和「更新策略」 2)寫入方式「直接將資料寫入目標表」,更新為「追加寫入資料」 |
4.0.28 |
|
4.0.29 |
|
4.1.9.1 | 「追加/更新/寫入資料」文案與「資料比對」統一,修改為「基於標識欄位,新增/修改/刪除欄位」 |
4.2.7.4 |
|
1.2 功能簡介
本文介紹「資料同步」設定寫入方式或者使用「資料轉換-DB表匯出」設定寫入方式時配置項說明。
1.2.1 寫入方式
「寫入方式」介面如下圖所示:
寫入方式有三種:
注:部分資料源支援分割槽寫入。詳情請參見:讀取、建立、寫入分割槽表
寫入方式 | 說明 | 效果範例 |
---|---|---|
直接將資料寫入目標表 | 目標表無物理主鍵且未配置邏輯主鍵映射:直接將資料寫入目標表 | 不同寫入方式效果說明 |
目標表有物理主鍵或已配置邏輯主鍵映射:基於主鍵比對資料行的差異:主鍵相同、主鍵不同 1)主鍵不同的資料行:追加寫入 2)主鍵相同的資料行,提供三種寫入策略:
| ||
清空目標表,再寫入資料 | 直接先把目標表清空掉,然後再寫入資料;有無主鍵均可以選擇 | |
基於標識欄位,新增/修改/刪除資料 | 1)目標表無物理主鍵:寫入方式中勾選了「更新」或「刪除」時,「主鍵映射」處不允許為空,需設定邏輯主鍵 2)目標表有物理主鍵或已配置邏輯主鍵映射,識別資料行的標識:相同、新增、修改、刪除:
|
1.2.2 交易控制
定時任務寫入資料庫時支援失敗回滾,即任務執行失敗後不會對目標表產生影響。
定時任務寫入資料庫時支援前置處理和後置處理,並支援將這些處理邏輯與核心寫入操作一起封裝為交易,一同支援失敗回滾。
2. 寫入方式說明
2.1 直接將資料寫入目標表
2.1.1 主鍵映射
建立「來源端-目標端」的資料行對應關係,設定步驟如下圖所示:
1)目標表中若存在物理主鍵/自動建表配置了主鍵,將直接根據目標表物理主鍵,自動生成主鍵映射行以確定資料唯一性。
2)目標表中若無物理主鍵:
目標表是自動建表生成的:自動建表時,在「欄位映射」處可以手動設定單個或多個欄位為物理主鍵。
目標表是已存在表:「主鍵映射」處,選擇欄位作為邏輯主鍵映射以確定資料唯一性,若為空則直接追加寫入資料。
2.1.2 主鍵衝突策略
注:目標端為 Hive 時,不支援「主鍵衝突策略」。
滿足以下任一條件,需要選擇「主鍵衝突策略」:
目標表存在物理主鍵。
目標表不存在物理主鍵,但配置了邏輯主鍵。
主鍵衝突策略有三種:
更新資料:主鍵相同時更新資料,新資料行改寫舊資料行。
記為髒資料:主鍵相同時記為髒資料,衝突的資料行不寫入。
忽略衝突:主鍵相同時忽略衝突,衝突的資料行不寫入。
2.2 清空目標表,再寫入資料
目標端為簡道雲時,請參見:簡道雲匯出算子
2.2.1 4.2.7.4 之前版本
直接先把目標表清空掉,然後再寫入資料;有無主鍵均可以選擇。
目標端為簡道雲時,不支援該寫入方式。
4.0.29 以及之後的版本:
1)當來源表沒有主鍵時,目標表存在主鍵,進行清表重寫時,先清空目標表,再對目標表進行寫入;
2)如果此時來源表存在兩條主鍵相同的資料,後一條會改寫前一條的記錄;
2.2.2 4.2.7.4 及之後版本
設定項 | 說明 |
---|---|
清表方式 | 提供兩種清表方式: 1)TRUNCATE:直接清空表資料,速度較快,無資料刪除記錄 2)DELETE:
|
主鍵映射 |
|
主鍵衝突策略 | 當來源表無主鍵,目標表有主鍵時,資料寫入目標表時依然會存在主鍵衝突情況,所以需要設定主鍵衝突策略
|
2.3 基於標識欄位,新增/修改/刪除資料
2.3.1 功能說明
注1:目標端為 Hive 時,不支援該寫入方式。
注2:新增/更新/刪除可勾選任意一個或多個。
寫入方式:
寫入方式勾選「刪除」時,可選擇物理刪除/邏輯刪除:
邏輯刪除:不實際刪除資料,標記刪除資料。
物理刪除:實際刪除資料。
兩種刪除方式的具體效果可參見:物理刪除和邏輯刪除的差別
標識欄位/標識值:
1)透過標識欄位和標識值篩選出需要新增/更新/刪除的資料。
2)若使用了「資料比對」算子,則自動讀取 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 時,支援使用「交易控制」功能。
2)當寫入方式選擇「清空目標表,再寫入資料」時:
清表方式為 TRUNCATE 時,只有 PostgreSQL、Greenplum 支援使用「交易控制」功能。
清表方式為 DELETE 時,支援交易控制的資料庫,均支援開啟「寫入交易控制」。
3.3 功能說明
定時任務寫入資料庫時支援前置處理和後置處理,並支援將這些處理邏輯與核心寫入操作一起封裝為交易,一同支援失敗回滾。介面如下圖所示:
交易控制配置項如下所示:
若來源端選擇了並行取數 ,去向端開啟「交易控制」,預設進行並行取數。
交易控制功能範例請參見:交易控制範例
功能 | 說明 |
---|---|
前置 SQL | 支援使用「@temp_tbl_nm_full」引用裝載時使用的中間表名,可以使用此參數定義SQL查詢,其他交易中引用此表名參數時,值為空字串 |
後置 SQL | 支援使用「@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,則不會遵循改寫邏輯,會追加寫入。