Pivotal Greenplum - 增量数据问题

Pivotal Greenplum - Incremental Data issue

当我尝试在一个 SQL 事务中捕获增量负载时。更新不工作。基本上,它会无限期地执行 90k 行。

输入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 事务。

如有任何帮助,我们将不胜感激。

试试这个:

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 服务器语法以使其更符合 ANSI,以便它在 Greenplum 中工作。

此外,您可能希望避免使用 UPDATE 语句。在执行 UPDATE 之前,您肯定想要 VACUUM。当您创建 table.

时,您可能希望使 tables Append Optimized (appendonly=true)