質問

単純なTalendジョブを使用してgreenplum hawqでビューを作成したい、基本的にすべてのビューを含むFileInputを持つことになります。その後、ビュースクリプトの作成を実行する必要があります。

これらのビュー(50~60.000)はOracle Systemから来たため、作成できなかったものを見つける必要があります。

これは私の問題のためのモックアップです: イメージの説明が入力されています

すでに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回実行したい。(最終バージョンでは、失敗したクエリのみを含む別のファイルを作成するので、後で修正することができますが、これは重要な点です。)

回避策としての

私はこのトロウ - > OnError - > FixedFlow - > FailedViewsの部品を別の仕事に移動しますが、それはエレガントなソリューションではありません。

役に立ちましたか?

解決

Tjavaflexでそれをしなさい。それは緑青のためにも機能します!以下のEXMALEでは、TRACLEINPUT_6:

でクエリを実行します。
"SELECT count(*) FROM "+((String)globalMap.get("ora_sch.SCHEMA_NAME")) + "." + ((String)globalMap.get("ora_tab.TABLE_NAME"))
.

クエリ結果についてはわかりません。それは失敗するかもしれません(例えば、誰かがテーブルを削除したばかりです)したがって、私はTjavaflex +繰り返し接続を使用します!結果のコードが生成された{...}キャッチブロック。

下記の場合、スキーマのテーブルを繰り返し、すべてのテーブルの行をカウントします。例外をJava HashMapに収集します。(HashMapはコンテキスト内ですが、それは別のストーリーです)

Enter Image説明

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();
}
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top