gpt4 book ai didi

etl - Talend greenplumRow 错误处理

转载 作者:行者123 更新时间:2023-12-04 12:58:25 30 4
gpt4 key购买 nike

我想使用一个简单的 talend 作业在 greenplum HAWQ 中创建 View ,它基本上有一个包含所有 View 的文件输入,然后我需要执行 CREATE VIEW 脚本。

由于这些 View (50-60.000) 来自 Oracle 系统,我需要找到我们无法创建的 View 。

这是我的问题的模拟:
enter image description here

我在数据库中有一个 View ,我想再创建 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 -> FixedFlow -> FailedViews 部分移到不同的工作中,但这不是一个优雅的解决方案。

最佳答案

用 tJavaFlex 做到这一点。它也适用于 Greenplumrow !!!在下面的示例中,我在 tOracleInput_6 中执行查询:

"SELECT count(*) FROM "+((String)globalMap.get("ora_sch.SCHEMA_NAME")) + "." + ((String)globalMap.get("ora_tab.TABLE_NAME"))

我不确定查询结果。它可能会失败(例如:有人刚刚删除了表)因此我使用 tJavaFlex+iterate 连接!生成的代码生成 try {...} catch 块。

在下面的情况下,我遍历模式的表并计算每个表中的行数。我将异常收集到一个 java hashmap 中。 (哈希图在上下文中,但这是另一回事)

enter image description here
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();
}

关于etl - Talend greenplumRow 错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25022640/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com