Talend GreenPlumrow错误处理
题
我想使用简单的Talend作业在Greenplum Hawq中创建视图,这基本上有一个文件upput,它包含所有视图,然后我需要执行Create View脚本。
由于这些视图(50-60.000)来自Oracle系统,我需要找到我们无法创建的系统。
这是我的问题的模拟:
我已经在db中有一个视图,我想再创建3次。这显然会失败。
这是输出:
Exception in component tGreenplumRow_2
org.postgresql.util.PSQLException: ERROR: relation "ad_apps_dependencies" already exists
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592)
.--------------.
| tLogRow_4 |
|=------------=|
|componenterror|
|=------------=|
|componenterror|
'--------------'
.-----------------------------------------------------+-------------------------------------------------------------.
| tLogRow_5 |
|=----------------------------------------------------+------------------------------------------------------------=|
|result |result1 |
|=----------------------------------------------------+------------------------------------------------------------=|
|ERROR: relation "ad_apps_dependencies" already exists|CREATE VIEW SYSTEM.AD_APPS AS SELECT * FROM APPLSYS.AD_APPS|
'-----------------------------------------------------+-------------------------------------------------------------'
.------------.
| tLogRow_6 |
|=----------=|
|subjobError |
|=----------=|
|Subjob Error|
'------------'
.
我想拥有这个输出3次,因为我试图运行3次查询。(在最终版本中,我创建一个只包含失败的查询的另一个文件,所以我们稍后可以修复它,但这是一个关键点。)
作为解决方法: 我可以移动这个trow - > onError - >固定流 - > failedviews分成不同的工作,但这不是一个优雅的解决方案。
解决方案
与tjavaflex一起做。它适用于GreenPlumrow !!!在下面的EXMAPLE中,我在ToracleInput_6中执行查询:
"SELECT count(*) FROM "+((String)globalMap.get("ora_sch.SCHEMA_NAME")) + "." + ((String)globalMap.get("ora_tab.TABLE_NAME"))
.
我不确定查询结果。它可能会失败(例如:有人刚刚丢弃桌子)因此我使用TjavaFlex +迭代连接!生成的代码生成了尝试{...} catch块。
在下面的情况下,我迭代架构的表并计算每个表中的行。我将例外收集到Java HashMap中。(HashMap在上下文中,但这是另一个故事)
tJavaFlex Begin code:
try{
tJavaflex main code:
// here is the main part of the component,
// a piece of code executed in the row
// loop
System.out.println(((String)globalMap.get("TYPE"))+" SELECT count(*) FROM "+((String)globalMap.get("ora_sch.SCHEMA_NAME")) + "." + ((String)globalMap.get("ora_tab.TABLE_NAME")));
tJavaFlex1 End code:
// end of the component, outside/closing the loop
} catch (Exception e) {
//put
((Map<String, String>)context.EXCEPTIONS).put(
((String)globalMap.get("TYPE"))+((String)globalMap.get("ora_sch.SCHEMA_NAME"))+"_"
+((Integer)globalMap.get("tFlowToIterate_8_CURRENT_ITERATION")).toString(),
((String)globalMap.get("ora_sch.SCHEMA_NAME"))+","
+ ((String)globalMap.get("ora_tab.TABLE_NAME")));
//print some debug message
System.out.print(((String)globalMap.get("TYPE"))+" ### SQL Exception at ");
System.out.print("Iteration Number: "+((Integer)globalMap.get("tFlowToIterate_8_CURRENT_ITERATION")).toString()+","+((String)globalMap.get("ora_sch.SCHEMA_NAME"))+","+ ((String)globalMap.get("ora_tab.TABLE_NAME")));
System.out.println(" ###");
//e.printStackTrace();
}
. 不隶属于 StackOverflow