合並成

基於源表將一組更新、插入和刪除合並到目標增量表中。

此語句僅支持Delta Lake表。

語法

合並target_table_nametarget_alias使用source_table_referencesource_aliasmerge_condition匹配matched_condition然後matched_action|匹配not_matched_condition然後not_matched_action...matched_action刪除|更新|更新expr|默認的(,...not_matched_action插入|插入column1(,...expr|默認的(,...

參數

  • target_table_name

    一個表名標識正在修改的表。引用的表必須是Delta表。

  • target_alias

    一個表別名對於目標表。別名不能包含列列表。

  • source_table_reference

    一個表名標識要合並到目標表中的源表。

  • source_alias

    一個表別名對於源表。別名不能包含列列表。

  • merge_condition

    一個關係的行如何與另一個關係的行組合。返回類型為BOOLEAN的表達式。

  • 匹配matched_condition

    匹配子句在源行與目標表行匹配時執行merge_condition和可選的match_condition

    matched_condition必須是布爾表達式。

    • 刪除

      刪除匹配的目標表行。

      無條件刪除匹配項時,允許多個匹配項。無條件刪除不會有歧義,即使有多個匹配項。

    • 更新

      更新匹配的目標表行。

      若要用源數據集的相應列更新目標Delta表的所有列,請使用更新.這相當於更新col1source.col1(,col2source.col2…]用於目標Delta表的所有列。因此,此操作假定源表與目標表中的列相同,否則查詢將拋出分析錯誤。

      請注意

      當啟用自動模式遷移時,此行為將發生改變。看到自動模式演化獲取詳細信息。

      自:磚11.2運行時您可以指定默認的作為expr顯式地將列更新為其默認值。

    如果有多個匹配子句,然後按指定的順序對它們求值。每一個匹配子句,除了最後一個,必須有一個matched_condition

    如果沒有匹配屬性匹配的源和目標行對的條件求值為truemerge_condition,那麼目標行保持不變。

  • 匹配not_matched_condition

    匹配子句在源行與任何目標行不匹配時插入一行merge_condition和可選的not_matched_condition

    not_matched_condition必須是布爾表達式。

    • 插入

      用源數據集的相應列插入目標Delta表的所有列。這相當於插入(col1(,col2…)(source.col1(,source.col2…)用於目標Delta表的所有列。此操作要求源表具有與目標表中相同的列。

      請注意

      當啟用自動模式遷移時,此行為將發生改變。看到自動模式演化獲取詳細信息。

    • 插入......

      根據指定的列和相應的表達式生成新行。不需要指定目標表中的所有列。對於未指定的目標列,將插入列默認值,或者如果沒有存在。

      自:磚11.1運行時您可以指定默認的作為表達式顯式插入目標列的默認列。

    如果有多個匹配子句,然後按指定的順序對它們求值。所有匹配從句,除了最後一個,必須有not_matched_condition年代。

重要的

一個合並如果源數據集的多行匹配,並試圖更新目標Delta表的相同行,則操作可能失敗。根據合並的SQL語義,這樣的更新操作是模糊的,因為它不清楚應該使用哪個源行來更新匹配的目標行。可以對源表進行預處理,以消除多個匹配的可能性。看到更改數據捕獲示例-it對更改數據集(即源數據集)進行預處理,在將更改應用到目標Delta表之前,隻保留每個鍵的最新更改。

例子

您可以使用合並用於複雜的操作,如重複數據刪除、上傳更改數據、應用SCD Type 2操作等。看到合並的例子舉幾個例子。