共用方式為


對應資料流程中的 Alter Row 轉換

適用於: Azure Data Factory Azure Synapse Analytics

提示

Data Factory in Microsoft Fabric 是下一代的 Azure Data Factory,擁有更簡單的架構、內建 AI 及新功能。 如果你是資料整合新手,建議先從 Fabric Data Factory 開始。 現有的 ADF 工作負載可升級至 Fabric,以存取資料科學、即時分析與報告等新能力。

資料流可同時在 Azure Data Factory 資料管線和 Azure Synapse Analytics 資料管線中使用。 本文章適用於映射資料流。 如果您不熟悉資料轉換,請參閱入門文章使用對應資料流程轉換資料

使用 Alter Row 轉換來設定資料列的插入、刪除、更新與更新插入原則。 您可以新增一對多條件做為運算式。 這些條件應依優先順序指定,因為每個資料列都會標示為符合第一個相符運算式的原則。 上述每一種條件都會導致插入、更新、刪除或更新插入一或多個資料列。 更改資料列可能會對您的資料庫產生 DDL 和 DML 動作。

更改資料列設定

Alter Row 轉換只會在資料流程中的資料庫、REST 或 Azure Cosmos DB 接收器上運作。 您指派給資料列的動作 (插入、更新、刪除、更新插入),不會在偵錯工作階段期間發生。 若要在資料庫資料表上套用 Alter Row 原則,請在管線中執行 Execute Data Flow 活動。

注意

對於使用原生 CDC 來源(如 SQL Server 或 SAP)的變更資料擷取資料流程,則不需要 Alter Row 轉換。 在這些案例中,ADF 會自動偵測資料列標記,因此更改資料列原則是非必要的。

指定預設資料列原則

建立 Alter Row 轉換,並指定條件為 true() 的資料列原則。 凡是不符合任何先前定義運算式的資料列,都會標示為指定的資料列原則。 根據預設,不符合任何條件運算式的資料列會被標記為 Insert

修改行原則

注意

若要使用一個原則標示所有資料列,您可以建立該原則的條件,並將條件指定為 true()

在資料預覽中檢視原則

使用偵錯模式,在資料預覽窗格中檢視您更改資料列原則的結果。 Alter Row 轉換的資料預覽,不會對目標執行 DDL 或 DML 動作。

更改資料列原則

每個 Alter Row 原則的圖示都會指出是否執行插入、更新、更新插入或刪除動作。 頂部標題會顯示預覽中每個原則影響的資料列數量。

在接收器中允許 Alter Row 原則

若要讓 Alter Row 原則生效,資料流必須寫入資料庫或 Azure Cosmos DB 接收器。 在接收器的設定索引標籤中,啟用該接收器所允許的 Alter Row 原則。

Alter Row 接收器

預設行為僅允許插入。 若要允許更新、更新插入或刪除,請勾選接收器中對應該條件的方塊。 如果已啟用更新、更新插入或刪除,您必須指定要在接收器中比對的索引鍵資料行。

注意

如果您的插入、更新或更新插入會修改接收器中目標資料表的結構描述,資料流程將會失敗。 若要修改資料庫中的目標結構描述,請選擇 [重新建立資料表] 作為資料表動作。 這樣會刪除並重新建立具有新結構描述定義的資料表。

接收器轉換需要單一索引鍵,或一組索引鍵,以便在目標資料庫中唯一識別資料列。 對於 SQL sink,請在 sink 設定標籤中設定金鑰。對於 Azure Cosmos DB,請在設定中設定分割區鍵,並且在你的 sink 映射中設定 Azure Cosmos DB 系統欄位「ID」。 對於 Azure Cosmos DB,更新、更新插入與刪除作業都必須包含系統資料行「ID」。

搭配 Azure SQL Database 和 Azure Synapse 的合併與更新插入

資料流程支援以更新插入選項,對 Azure SQL Database 和 Azure Synapse 資料庫集區 (資料倉儲) 執行合併。

不過,您可能會遇到目標資料庫結構描述對索引鍵資料行使用識別屬性的情況。 此服務要求您識別用來比對資料列值,以進行更新與更新插入的索引鍵。 但是,如果目標資料行已設定身分識別屬性,而且您正在使用 upsert 原則,則目標資料庫不會允許您寫入至資料行。 當您嘗試對分散式資料表的分佈資料行執行更新插入時,也可能會發生錯誤。

以下是修正此問題的方法:

  1. 瀏覽至 Sink 轉換的 Settings,並設定「Skip writing key columns」。 這會告知服務不要寫入您選為對應索引鍵值的資料行。

  2. 如果造成識別資料行問題的不是該索引鍵資料行,則可以使用 Sink 轉換的前置處理 SQL 選項:SET IDENTITY_INSERT tbl_content ON。 然後,使用後置處理 SQL 屬性將其關閉:SET IDENTITY_INSERT tbl_content OFF

  3. 無論是識別欄位案例,還是分佈資料行案例,您都可以將邏輯從 Upsert 改為使用條件式分割轉換,分別採用獨立的更新條件與獨立的插入條件。 如此一來,您便可以在更新路徑上設定對應,忽略索引鍵資料行對應。

資料流程指令碼

語法

<incomingStream>
    alterRow(
           insertIf(<condition>?),
           updateIf(<condition>?),
           deleteIf(<condition>?),
           upsertIf(<condition>?),
        ) ~> <alterRowTransformationName>

範例

下列範例是名為 CleanData 的更改資料列轉換,會接受傳入資料流 SpecifyUpsertConditions,並建立三個更改資料列條件。 在先前的轉換中,會計算名為 alterRowCondition 的資料行,以判斷資料列是否在資料庫中插入、更新或刪除。 如果資料行的值具有與變更資料列規則相符的字串值,則其會被指派該政策。

在 UI 中,這項轉換看起來如下圖所示:

更改資料列範例

此轉換的資料流指令碼位於下列程式碼片段中:

SpecifyUpsertConditions alterRow(insertIf(alterRowCondition == 'insert'),
	updateIf(alterRowCondition == 'update'),
	deleteIf(alterRowCondition == 'delete')) ~> AlterRow

在 Alter Row 轉換之後,您可能會想要將資料輸出至目的地資料存放區