tgreenplumrow-Join和Filter不是woking

时间:2017-03-17 10:59:10

标签: talend greenplum

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

输入信息

仅在greenplum中的源表和目标表

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

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

喜欢这个

SQL事务

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

我收到错误:

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

实际数据流

try
{
 Sch jsch=new JSch();                   
 host=JOptionPane.showInputDialog("Enter username@hostname",       
 System.getProperty("user.name")+"@localhost"); 
 String user=host.substring(0, host.indexOf('@'));
 host=host.substring(host.indexOf('@')+1);
 session=jsch.getSession(user, host, 22);
 UserInfo ui=new MyUserInfo();
 session.setUserInfo(ui);
 session.connect();
 executor = (ChannelExec) session.openChannel("exec"); 
 executor.setCommand(command1);
 executor.connect();
 BufferedReader reader = new BufferedReader(new InputStreamReader  
 (executor.getInputStream())); 
 String line;
 StringBuilder sb = new StringBuilder();
 while((line= reader.readLine()) != null )
 {
   System.out.println(line);

}

    }

    catch (Exception exp){

    }

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

Q2:是否可以在tmap中处理源文件和目标文件方案之上?

对此的任何帮助都会非常感激吗?

2 个答案:

答案 0 :(得分:1)

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

希望这会帮助你。

答案 1 :(得分:1)

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

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

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

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