Talend tgreenplumrow连接和筛选器未运行

Talend tgreenplumrow连接和筛选器未运行,talend,greenplum,Talend,Greenplum,当我尝试在tgreenplumRow组件中执行多个查询时。 它不允许我加入和过滤查询 输入信息 源表和目标表都仅在greenplum中 源表-指向称为HDFS的外部源 目标表-greenplum数据库中的常规表 像这样 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

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

输入信息

源表和目标表都仅在greenplum中

源表-指向称为HDFS的外部源

目标表-greenplum数据库中的常规表

像这样

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:如何在TXXROW组件中使用联接和筛选运行多个查询

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;"

希望这能对您有所帮助。

在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个commit组件

我认为这使代码更容易理解和调试,因为现在您不知道insert或update是否会引发错误

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


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

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

我认为这使代码更容易理解和调试,因为现在您不知道insert或update是否会引发错误

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



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

您能提供tgreenplumrow组件的屏幕截图以及该组件中的查询吗?在编辑出现的问题时,错误地附加了屏幕截图。否则,我尝试只使用双引号。你能提供tgreenplumrow组件的屏幕截图和该组件中的查询吗?在编辑屏幕截图时,错误地附加了有问题的屏幕截图。否则我只尝试了双引号。是的,我尝试了双引号并给出了相同的错误。talend组件的t*行系列支持联接?是的,我尝试了双引号并给出了相同的错误。talend组件的t*行系列支持联接?非常感谢。当我插入\“而不是”时,它对我起作用。我可以在tgreenplumrow组件之后获得在此流中插入/更新的行数。如果您创建自己的行,则是。我向Talend建议,我们应该为所有row组件提供NB_线,在过去两年左右的时间里,我们在某个地方对该组件提出了一个功能要求……NB_线var适用于trow。或者仅适用于toutput组件我知道,我最终分叉了许多组件。我创建了一个自定义GPRow和一个“tflowloger”组件,以便将结果插入日志表。无论您如何在两个表之间移动数据,您都希望知道移动的记录。默认情况下Talend应该有这个。非常感谢。当我插入\“而不是”时,它对我起作用。我可以在tgreenplumrow组件之后获得在此流中插入/更新的行数。如果您创建自己的行,则是。我向Talend建议,我们应该为所有row组件提供NB_线,在过去两年左右的时间里,我们在某个地方对该组件提出了一个功能要求……NB_线var适用于trow。或者仅适用于toutput组件我知道,我最终分叉了许多组件。我创建了一个自定义GPRow和一个“tflowloger”组件,以便将结果插入日志表。无论您如何在两个表之间移动数据,您都希望知道移动的记录。默认情况下,Talend应该具有此功能。