当我尝试在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中处理源文件和目标文件方案之上?
对此的任何帮助都会非常感激吗?
答案 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只是简单地将您写入的查询传递给数据库。