2017-06-14 2 views
1

Ich habe eine ETL in Talend Open Studio geschrieben, die eine CSV/TSV-Datei in eine Datenbank lädt. Zu diesem Zweck möchte ich das Trennzeichen in der tFileInputDelimited-Komponente bereitstellen, indem ich den dynamischen Kontext aus einer Textdatei lade. Ich habe es in der Kontextdatei als fieldDelimiter = "\ t" und in der tFileInputDelimited-Komponente wie in der screenshot gezeigt angegeben. Aber es funktioniert nicht als Trennzeichen. Ich habe auch versucht, fieldDelimiter = "\\ t" oder fieldDelimiter = "\ u0009" (Unicode-Zeichen für Registerkarte).Verwendung der Registerkarte als Trennzeichen in der tFileInputDelimited-Komponente in Talend Open Studio

Was soll ich in der Kontextdatei angeben, so dass das Trennzeichen ein Tab-Zeichen und nicht "\ t" String ist, wie es in diesem Fall passiert?

+0

Was meinen Sie mit Kontext * Datei *? Ist diese Option auch im Job-Tab "Kontext" eingestellt? Wie führen Sie den Job aus? – tobi6

Antwort

0

Es gibt keine Funktion (String)context.get("key"), die ich kenne. Wenn Sie das Trennzeichen im Kontext als String-Element festgelegt haben, greifen Sie einfach direkt darauf zu. Jetzt wird ein leerer String als Feldtrennzeichen gesetzt.

Wenn Ihr Feld also fileDelimiter heißt, setzen Sie einfach context.fileDelimiter in den Feldtrenner .

+0

Ich kann mit context.fileDelimiter nicht auf Kontextvariablen zugreifen, aber context.get ("fileDelimiter") funktioniert. Das Problem ist, wenn ich fileDelimiter = "\ t" vorschlage, möchte es die Dateieinträge mit der Zeichenfolge "\ t" und nicht mit dem Tab-Zeichen abgrenzen. –

+0

Lustig ist, ich habe gerade gesehen, dass die Methode, die Sie verwenden, von Talend intern verwendet wird - um eine Variable namens 'context.fileDelimiter' zu füllen. Es könnte also ein Problem mit der Codegenerierung geben. Außerdem wird der Wert unverändert übernommen und es wird kein Entweichen ausgeführt. Ich würde weiter untersuchen, warum 'context.fileDelimiter' nicht verfügbar ist, das könnte helfen. – tobi6

+0

Vielen Dank @ tobi6! –

1

Ich bemerke einen Unterschied in den Namen der Kontextvariablen. In dem Screenshot haben Sie (String)context.get("fileDelimiter") erwähnt. Aber im Text sagen Sie "Ich habe es in der Kontextdatei als fieldDelimiter="\t" angegeben".

halten nur den Kontext, wie in der .properties-Datei folgt

fieldDelimiter=\t 

Auch context.fieldDelimiter statt (String) context.get ("fileDelimiter") verwenden, funktionieren sollte.

0

Wie von anderen angegeben, sollten Sie die context.ParamName-Syntax verwenden. Der Vorteil dieser Methode besteht in der Syntaxprüfung zur Kompilierzeit, die das Risiko von Tippfehlern in Ihren Variablennamen eliminiert. Dieser Parameter muss in Ihrem Job deklariert sein (Registerkontexte), damit Talend ihn erkennt. Sie können es entweder als integrierte Datei erstellen oder es importieren, wenn es sich im Repository befindet.

1

In Ihrer Kontextdatei, setzen Sie einfach fileDelimiter = \ t (Ohne Anführungszeichen) Und dann Zugriff auf die Variable im Feld Trennzeichen. Talend wird es automatisch als String behandeln. Hoffe, das funktioniert.

Verwandte Themen