【发布时间】:2014-09-21 06:11:12
【问题描述】:
我想使用一个简单的 talend 作业在 greenplum HAWQ 中创建视图,它基本上有一个包含所有视图的文件输入,然后我需要执行 CREATE VIEW 脚本。
由于这些视图 (50-60.000) 来自预言机系统,我需要找到我们无法创建的视图。
这是我的问题的模型:
我已经在数据库中有一个视图,我想再创建 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 部分移动到不同的工作中,但这不是一个优雅的解决方案。
【问题讨论】:
-
我不明白你在这里做什么。既然知道重复尝试会失败,为什么还要尝试创建 3 次视图?
-
我想在 SQL 失败时进行错误处理。最容易重现错误的是运行 3 次 -> 我想捕获错误 3 次。
-
那么问题是什么?您想在 SQL 错误失败时记录?应该将其写入日志,而无需您捕获错误然后将其扔到日志中,正如您在输出的一开始就可以看到的那样。
-
我有一个包含 98523 SQL 的文件,如果第一个失败 -> 整个执行停止。我预计一半的 SQL 会失败,我想检查/重新执行它们。如果我想再次执行所有 SQL-s,它们都会失败。
-
如果您不勾选“出错时死”框并且作业下游不需要来自 SQL 查询的数据,那么它应该继续处理并且日志将包含所有失败的查询。您实际上可以在您的设置中看到这一点,因为 tLogRow5 有一些数据,并且该子作业仅在发生 SQL 错误的子作业上执行。