在我的情況下,當前的新數據,有效的記錄。新數據的任何記錄,不應該被貼上“消失”,任何匹配的記錄應貼上“更新”。最後,應該添加任何新記錄。
總之,在一個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和這是超級容易做到)
檢測刪除不工作的。
merge語句將評估傳入的數據與現有的數據。它不會對輸入數據檢查現有數據。
馬克刪除,你將不得不專門更新這些記錄。
你怎麼這麼做?
如果你的源係統檢測到刪除,這取決於他們可能被添加到輸入數據,您可以使用merge語句。
但在許多情況下刪除不檢測。
在這種情況下,你將不得不比較三角洲湖表的當前狀態和一個完整的當前版本的數據。
後者可以是一個問題。我通常做什麼(RDBMS的源係統)是獲取完整的表的聚集索引(這將會非常快,即使有很多數據)和使用比較+ left_anti加入。
還有更改數據以三角洲湖,你可以使用,但這隻適用如果你的源數據是三角洲湖格式。
這道理嗎?
檢測刪除不工作的。
merge語句將評估傳入的數據與現有的數據。它不會對輸入數據檢查現有數據。
馬克刪除,你將不得不專門更新這些記錄。
你怎麼這麼做?
如果你的源係統檢測到刪除,這取決於他們可能被添加到輸入數據,您可以使用merge語句。
但在許多情況下刪除不檢測。
在這種情況下,你將不得不比較三角洲湖表的當前狀態和一個完整的當前版本的數據。
後者可以是一個問題。我通常做什麼(RDBMS的源係統)是獲取完整的表的聚集索引(這將會非常快,即使有很多數據)和使用比較+ left_anti加入。
還有更改數據以三角洲湖,你可以使用,但這隻適用如果你的源數據是三角洲湖格式。
這道理嗎?