取消
顯示的結果
而不是尋找
你的意思是:

如何合並兩個表和跟蹤丟失行變更以及新行嗎

577391年
新的貢獻者二世

在我的情況下,當前的新數據,有效的記錄。新數據的任何記錄,不應該被貼上“消失”,任何匹配的記錄應貼上“更新”。最後,應該添加任何新記錄。

總之,在一個merge語句我想:

1。從當前數據添加新行

2。更新現有的源表中的行(狀態= "更新")

3所示。更新現有行缺少源表(狀態=“了”)

這是可能的嗎?這是我迄今為止,但這並不讓我點3。

這是一個非工作的例子,我想做什麼

創建或替換表目標(

id INT非空,

狀態VARCHAR (30) NOT NULL

);

插入目標(id、狀態)

值(1“初始狀態”)(“初始狀態”)(“初始狀態”);

創建或替換表源(

id INT非空,

狀態VARCHAR (30) NOT NULL

);

插入源(id、狀態)

值(1“初始狀態”)(“初始狀態”)(“初始狀態”);

並入目標t

使用源代碼年代

在t。id = s.id

當匹配更新集合t。狀態= "更新"

當沒有匹配插入(id、狀態)值(s。id, s.status);

從目標選擇*訂單id;

我試著把條件不匹配時,然後使用“更新設置”,但我得到錯誤信息:

錯誤的SQL語句:拋出ParseException:

不匹配的輸入設置的期望“插入”(第6行,pos 39)

這是可能的嗎?

(我來自SAS和這是超級容易做到)

1接受解決方案

接受的解決方案

werners1
尊敬的貢獻者三世

檢測刪除不工作的。

merge語句將評估傳入的數據與現有的數據。它不會對輸入數據檢查現有數據。

馬克刪除,你將不得不專門更新這些記錄。

你怎麼這麼做?

如果你的源係統檢測到刪除,這取決於他們可能被添加到輸入數據,您可以使用merge語句。

但在許多情況下刪除不檢測。

在這種情況下,你將不得不比較三角洲湖表的當前狀態和一個完整的當前版本的數據。

後者可以是一個問題。我通常做什麼(RDBMS的源係統)是獲取完整的表的聚集索引(這將會非常快,即使有很多數據)和使用比較+ left_anti加入。

還有更改數據以三角洲湖,你可以使用,但這隻適用如果你的源數據是三角洲湖格式。

這道理嗎?

在原帖子查看解決方案

2回答2

werners1
尊敬的貢獻者三世

檢測刪除不工作的。

merge語句將評估傳入的數據與現有的數據。它不會對輸入數據檢查現有數據。

馬克刪除,你將不得不專門更新這些記錄。

你怎麼這麼做?

如果你的源係統檢測到刪除,這取決於他們可能被添加到輸入數據,您可以使用merge語句。

但在許多情況下刪除不檢測。

在這種情況下,你將不得不比較三角洲湖表的當前狀態和一個完整的當前版本的數據。

後者可以是一個問題。我通常做什麼(RDBMS的源係統)是獲取完整的表的聚集索引(這將會非常快,即使有很多數據)和使用比較+ left_anti加入。

還有更改數據以三角洲湖,你可以使用,但這隻適用如果你的源數據是三角洲湖格式。

這道理嗎?

577391年
新的貢獻者二世

是的,這可以幫助!謝謝你!知道它不會發生的幫助我很多。

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map