2017-02-26 43 views
0

當我嘗試捕獲一個SQL事務中的增量加載。更新不起作用。基本上,它爲90k行保持無限的執行時間。Pivotal Greenplum - 增量數據問題

輸入SQL事務

BEGIN; 
INSERT INTO IncrementalLoad_Dest.dbo.tblDest 
(ColID, ColA, ColB, ColC) 
SELECT s.ColID, s.ColA, s.ColB, s.ColC 
FROM IncrementalLoad_Source.dbo.tblSource s 
LEFT JOIN IncrementalLoad_Dest.dbo.tblDest d ON d.ColID = s.ColID 
WHERE d.ColID IS NULL ; 
UPDATE d 
SET 
d.ColA = s.ColA 
,d.ColB = s.ColB 
,d.ColC = s.ColC 
FROM IncrementalLoad_Dest.dbo.tblDest d 
INNER JOIN IncrementalLoad_Source.dbo.tblSource s ON s.ColID = d.ColID 
WHERE (
(d.ColA != s.ColA) 
OR (d.ColB != s.ColB) 
OR (d.ColC != s.ColC) 
); 
END; 

更新語句不從PSQL程序執行。爲什麼它繼續執行,甚至不會拋出錯誤。

此外,嘗試檢查目標文件上的活動鎖。不存在鎖定。

請考慮用雙引號括起來的列,以及用greenplum SQL語法編寫的SQL事務。

任何幫助,將不勝感激。

回答

1

試試這個:

UPDATE IncrementalLoad_Dest_dbo.tblDest d 
SET d.ColA = s.ColA, 
    d.ColB = s.ColB, 
    d.ColC = s.ColC 
FROM IncrementalLoad_Source_dbo.tblSource s 
WHERE s.ColID = d.ColID 
and ((d.ColA != s.ColA) OR (d.ColB != s.ColB) OR (d.ColC != s.ColC)); 

基本上,你必須改變你的SQL Server語法更加符合ANSI所以它在Greenplum的。

此外,您可能想要避免UPDATE語句。在執行UPDATE之前,您一定要使用VACUUM。在創建表格時,您可能想要創建表格Append Optimized(appendonly = true)。

+0

是否有任何未來的可能性在greenplum數據庫中獲得UPSERT行動? – NEO

+0

我做了上述相同的方式。它繼續執行的情況一樣。我們可以聊聊天嗎? – NEO

+0

此外,在取消更新語句之後檢查發現文件中的鎖。:https://paste.ofcode.org/g36qTr32RvxRUsSgAyAdeT – NEO