2014-01-24 51 views
1

在Pentaho中,我有一個表輸出步驟,我將大量記錄加載到netezza目標表中。Pentaho表輸出步驟沒有顯示日誌中的適當錯誤

其中一行失敗,日誌顯示哪些值導致問題。但是日誌可能不正確,因爲當我用這些值創建插入語句並在數據庫上單獨運行它時,它工作正常。

我的問題是: 在Pentaho中,有沒有一種方法可以確定db插入失敗時,究竟哪些值導致問題,爲什麼?

編輯:錯誤是'列寬超過',它顯示我應該導致問題的值。但是,我用這些值做了一個插入語句,它工作的很好。所以我認爲Pentaho沒有向我顯示正確的錯誤信息,它是導致問題的一組不同的值。

+0

在猜測我會說你有你的輸入集重複值。所以,你加載一個鍵值,然後你嘗試加載相同的值,然後一堆行,並得到一個重複的鍵錯誤。如果是這樣的話,你不能得到的DUP你的輸入集,你可以用'獨特Values'一步篩選他們。如果您的「問題」不是重複的關鍵錯誤,請發佈它的內容。 –

+0

謝謝你,你能不能請儘快我的編輯,看看它是否有助於調試。 – Victor

+0

聽起來像@carexcer就在它上面。如果您發佈要加載的表的DDL,這也會有所幫助。而當你'做了這些值並插入語句'時,你是否直接從錯誤日誌中複製值? –

回答

1

我用來解決這類問題的另一種方法是在數據庫中使用加寬的列類型創建另一個表。然後在變換中,添加一個連接到新表的Table output步驟。然後將原來的Table output連接到新的步驟,但是當詢問時,選擇「錯誤處理」作爲跳躍類型。

當您運行轉換時,違規的行將在新表中結束。然後,您可以確切地調查特定行的問題。

例如,你可以這樣做:

insert into [original table] select * from [error table]; 

你可能會從你的本地DB接口得到一個更好的錯誤消息不是從JDBC驅動程序。

+0

偉大的想法,我嘗試的第一件事週一 – Victor

+0

另一件事你可以做,如果你需要,在你把一個序列計數器上游變換和在錯誤表中添加一列來存儲。然後,當行到達您的錯誤表中時,您確切知道它來自您的輸入集中的哪一個正在破壞。 –

1

我不知道你的問題到底是什麼,但我想我以前有同樣的問題。

一切似乎都正確,但問題在於,在某些轉換中,當我將數值轉換爲字符串時,轉換在字段末尾添加了空白,並且該字段的長度爲n+1,而不是n,但這很難看到。

一個實際的例子是,如果您正在使用計算器步驟進行轉換,則可以使用YEAR()函數來提取日期字段的年份,並且可能會在該年份的新字段中添加空格,因此如果年的長度爲4,在該步驟之後它的長度爲5,並且當您要將一行(當年字段爲string(5))加載到數據倉庫中並且在您的數據倉庫中期望string(4) ,你會得到現在正在發生的同樣的錯誤。

You think is happening --> year = "2013" --> length 4 
Really is happening --> year = "2013 " --> length 5 

我建議你付出相當注意字符串字段和它們的長度,因爲如果一些轉換添加一個空白,你不希望你可以失去很多的時間去尋找錯誤(我的經驗)。

我希望這可以對你有用!

編輯:我猜你正在用PDI(勺子,在水壺之前)和錯誤產生時,你正在加載數據倉庫,所以糾正我,如果我錯了。

+0

謝謝,我檢查了每場,我認爲都出現UPIN日誌as'problem價值的值是沒有問題的。導致問題的實際值未顯示在日誌中。 – Victor

+0

你能否提供提供日誌的完整錯誤?也許你是對的,但如果我看到完整的錯誤信息,我可以幫助你更多。如果你能提供你正在使用會更好的步驟,因爲一些步驟tranformations有問題,有時會使用其它方法來完成一些事情 – carexcer

+0

非常感謝是需要的,我將這樣做。再次感謝男士,感謝您的幫助。 – Victor

0

您可以使用文件,nzload命令,與您進行詳細的分析提供了這個命令,你可以找到確切的錯誤,以及不良記錄在BADFILE。

例如 -

nzload -u <username> -pw <password> -host <netezzahost> -db <database> -t <tablename> -df <datafile> -lf <logfile> -bf <badrecords file name> -delim <delimiter> 
相關問題