2017-06-14 56 views
1

我已經寫在Talend Open Studio的加載在數據庫中的CSV/TSV文件的ETL定界符tFileInputDelimited組件。爲此,我想在文本文件中使用動態上下文加載在tFileInputDelimited組件中提供分隔符。我已經在上下文文件中將其指定爲fieldDelimiter =「\ t」,並在screenshot中顯示的tFileInputDelimited組件中指定它。但是,它不能用作分隔符。我已用fieldDelimiter = 「\\噸」fieldDelimiter = 「\ u0009」(UNICODE爲製表符)也嘗試。使用選項卡,在Talend Open Studio的

我應該提供上下文文件,以便分隔符是一個製表符,而不是「\ t」的字符串作爲在這種情況下是怎麼回事?

+0

你是什麼意思的上下文*文件*?這個選項是否在工作標籤「上下文」中設置?你如何執行這項工作? – tobi6

回答

0

沒有功能(String)context.get("key"),我知道的。如果您在上下文中將分隔符設置爲String元素,則可以直接訪問它。現在將會有一個空字符串設置爲字段分隔符我想。

因此,如果您的字段被稱爲fileDelimiter只需將context.fileDelimiter納入字段分隔符

+0

我無法使用context.fileDelimiter訪問上下文變量,但context.get(「fileDelimiter」)有效。問題是當我指定fileDelimiter =「\ t」時,它打算使用字符串「\ t」而不是製表符分隔文件記錄。 –

+0

有趣的是,我剛剛看到你正在使用的方法正在被Talend內部使用 - 填充名爲'context.fileDelimiter'的變量。所以代碼生成可能會有一些問題。此外,該價值正在被採取,並沒有逃脫正在進行。我會進一步探討爲什麼'context.fileDelimiter'不可用,這可能會有所幫助。 – tobi6

+0

非常感謝@ tobi6! –

1

我注意到上下文變量名稱的不同。在屏幕截圖中,您提到了(String)context.get("fileDelimiter")。但是在文本中,您說「我已經在上下文文件中將其指定爲fieldDelimiter="\t"」。

只是保持上下文關係中的屬性文件如下應該工作

fieldDelimiter=\t 

還可以使用context.fieldDelimiter代替(字符串)context.get( 「fileDelimiter」)。

0

正如其他人所指出的,你應該使用context.ParamName語法,這種方法的好處是語法在編譯時消除錯別字在變量名的風險檢查。 此參數必須在作業(上下文選項卡)中聲明,以便Talend識別它。您可以將其作爲內置模塊創建,也可以將其導入到存儲庫中。

1

在您的上下文文件中,只需將fileDelimiter = \ t (不含引號) 然後在字段分隔符中訪問該變量。 Talend會自動將其作爲字符串處理。 希望這個作品。

相關問題