2017-03-14 3 views

Antwort

0

Zuerst müssen Sie TalendDate.diffDate(column1,column2,"pattern") verwenden, um den Zeitunterschied zu erhalten. Wenn Sie dann den aktuellen Wert mit dem vorherigen vergleichen möchten (in der gleichen Spalte), können Sie eine Sequenz für Ihren Fluss festlegen, damit Sie erkennen können, welcher der vorherige Wert ist. Dann müssen Sie nur zweimal Ihren Fluss lesen und einen inneren Join zwischen der aktuellen Sequenz und der aktuellen Sequenz -1 haben, um das aktuelle Datum und das vorherige Datum zu erhalten.

Erste Subjob: YourFlow -> tMap -> tHashOutput

In tMap, eine neue Spalte "Reihe" zu Ihrem Feld hinzufügen und Numeric.sequence("s1",1,1) verwenden. Auf diese Weise haben alle Zeilen eine ID.

Dann lesen Sie zweimal Ihre Hash, und kommen Ströme auf "Sequenz - 1"

tHashInput_1----| 
       |--tMap--->Output 
tHashInput_2----| 

die TalendDate.diffDate() -Methode in der Ausgabe Stoßen, mit den beiden Termine Felder. Hier

+0

zum Vergleich i tMemorizeRows für bin mit dem letzten Wert des Arrays bekommen, aber leider ist ich nicht den vorherigen Wert aus dem Array bekommen, ich bin Wenn ich null als Ausgabe bekomme, weiß ich nicht, warum ich nicht –

+0

bekomme, also hast du die Lösung versucht, die ich zur Verfügung gestellt habe? – Corentin

+0

Ich habe das versucht, Inzwischen versuche ich auch die anderen Wege. Deine Lösung funktioniert –

0

ist eine Alternative:

starten definieren Talend Job Ausführungszeit beginnen, auf diese Weise (hier in einem tJava, aber Sie können auch tSetGlobalVar Komponente verwenden):

globalMap.put("startDate", TalendDate.getDate("CCYY/MM/DD hh:mm:ss")); 

Der folgende Code verwendet wird, später im Job in einem tJava:

String endDate = TalendDate.getDate("CCYY/MM/DD hh:mm:ss"); 

long executionTime = format.parse(endDate).getTime() - format.parse(((String)globalMap.get("startDate"))).getTime(); 

System.out.println("Execution Time : "+(executionTime/(60*60*1000))+" Hour(s) "+(executionTime/(60*1000)%60)+" Minute(s) "+(executionTime/1000%60)+" second(s)."); 
Verwandte Themen