greenplum row-Join 和 Filter 不起作用

tgreenplumrow-Join and Filter is not woking

当我尝试在 tgreenplumRow 组件中执行多个查询时。 它不允许我加入和过滤查询。

输入信息

源和目标 table 都在 greenplum 中

源table - 指向名为 HDFS 的外部源

目标 TABLE - greenplum 数据库中的常规 table

像这样

SQL 交易

Begin;
"insert into target_tbl (select S.* from source_tbl s "LEFT JOIN" target_tbl d ON s."PK"=d."PK" where d."PK" is null) ;

UPDATE target_tbl d
SET
"COL" = s."COL"
FROM source_tbl s 
WHERE s."PK"=d."PK" and d."COL" != s."COL"
;
END;

我得到的错误:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
Syntax error on tokens, delete these tokens

实际数据流为

              tgreenplumconnection
                        |
tjdbcinput -->tmap -->thdfsoutput -->tgreenplumrow -->tgreenplumcommit

Q1:如何运行在 txxxROW 组件中使用 Join 和 filter 进行多个查询。

Q2: 是否可以在 tmap 中处理上述源文件和目标文件场景?

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

在 tgreeenplumrow 组件中,您只需将查询放在双引号之间,例如

"Begin;
insert into target_tbl (select S.* from source_tbl s LEFT JOIN target_tbl d ON s.PK=d.PK where d.PK is null) ;

UPDATE target_tbl d
SET
COL = s.COL
FROM source_tbl s 
WHERE s.PK=d.PK and d.COL != s.COL;
END;"

希望这对您有所帮助。

我喜欢将这些查询分解成单独的部分。在您的情况下,您想关闭连接上的自动提交。 所以在映射之后你有 2 个 greenplumRows 和 1 个提交组件。

我认为这使代码更易于理解和调试,因为现在您不知道插入或更新是否会引发错误。

不要忘记用 \ 字符转义 \ 和双引号。我认为这是给你带来麻烦的原因。

t*row 只是简单地将您写入数据库的查询传递给数据库。