kettle使用文件導入到Postgresql出現以下幾種問題的總結

一、kettle使用文件導入到Postgresql出現以下幾種問題的總結:sql

 1 kettle使用文件導入到Postgresql出現以下幾種問題的總結:  2 1、第一種錯誤,報錯如ERROR: extra data after last expected column所示。或者報錯爲報錯爲0x05,多一列,extra data after last expected column。  3 1)、sql查詢語句定位到某個字段:  4     SELECT * from 數據表名稱 where 字段名稱 like CONCAT('%',char(5),'%')  5 2)、解決方法,使用空替代,緣由是出現特殊字符,char(5),這種字符,致使的錯誤。  6 解決方法以下所示:  7 public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {  8     Object[] r = getRow();  9 
10     if (r == null) { 11  setOutputDone(); 12     return false; 13  } 14 
15     // It is always safest to call createOutputRow() to ensure that your output row’s Object[] is large 16     // enough to handle any new fields you are creating in this step. 
17     r = createOutputRow(r, data.outputRowMeta.size()); 18 
19     String 字段名稱 = get(Fields.In, "字段名稱").getString(r); 20     if(字段名稱 != null) { 21         字段名稱 = 字段名稱.replaceAll((char)5 + "", ""); 22  } 23     get(Fields.Out, "字段名稱").setValue(r, 字段名稱); 24 
25     // Send the row on to the next step. 
26  putRow(data.outputRowMeta, r); 27 
28     return true; 29 } 30 
31 2、第二種錯誤,報錯如missing data for column "datastamp"32 1)、sql查詢語句定位到某個字段: 33     SELECT * from 數據表名稱 where 字段名稱 like CONCAT('%',char(10),'%') 34  或者 35     SELECT * from 數據表名稱 where 字段名稱 like CONCAT('%',char(13),'%') 36 2)、解決方法:是字段的值出現了,換行回車,char(10),char(13)。char(10)多一行,少n列,missing data column xxx。解決方法,使用字符替代,而後再替換回來。 37 解決方法以下所示: 38 public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException { 39     Object[] r = getRow(); 40 
41     if (r == null) { 42  setOutputDone(); 43     return false; 44  } 45 
46     // It is always safest to call createOutputRow() to ensure that your output row’s Object[] is large 47     // enough to handle any new fields you are creating in this step. 
48     r = createOutputRow(r, data.outputRowMeta.size()); 49 
50     String 字段名稱 = get(Fields.In, "字段名稱").getString(r); 51     if(字段名稱 != null) { 52         字段名稱 = 字段名稱.replaceAll("\\r", "@#r;"); 53         字段名稱 = 字段名稱.replaceAll("\\n", "@#n;"); 54  } 55     get(Fields.Out, "字段名稱").setValue(r, 字段名稱); 56     
57     // Send the row on to the next step. 
58  putRow(data.outputRowMeta, r); 59 
60     return true; 61 } 62 
63 3、第三種錯誤,報錯如,0x00的解決方法: 64 1)、sql查詢語句定位到某個字段: 65     SELECT * from 數據表名稱 where 字段名稱 like CONCAT('%',char(0),'%') 66 2)、解決方法1 67 public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException { 68     Object[] r = getRow(); 69 
70     if (r == null) { 71  setOutputDone(); 72     return false; 73  } 74 
75     // It is always safest to call createOutputRow() to ensure that your output row’s Object[] is large 76     // enough to handle any new fields you are creating in this step. 
77     r = createOutputRow(r, data.outputRowMeta.size()); 78 
79     // Get the value from an input field 
80     String 字段名稱 = get(Fields.In, "字段名稱").getString(r); 81 
82     if(字段名稱 != null) { 83         字段名稱= 字段名稱.replaceAll("\\u0000", ""); 84  } 85 
86     get(Fields.Out, "字段名稱").setValue(r, 字段名稱); 87 
88     // Send the row on to the next step. 
89  putRow(data.outputRowMeta, r); 90 
91     return true; 92 } 93

 

待續......this

相關文章
相關標籤/搜索