【Kettle】異常:Unable to get value 'Date' from database resultset


一、背景

電腦安裝的kettle工具版本是7.1,由於前一個項目的使用的Mysql8.0的數據庫,所有將lib目錄下mysql連接驅動升級到mysql-connector-java-8.0.26.jar,當前使用的數據版本是5.7.24。

在整合kettle腳本,發現腳本好多都報錯,具體異常如下:

2022/01/18 23:06:36 - dysjcq.0 - ERROR (version 7.1.0.0-12, build 1 from 2017-05-16 17.18.02 by buildguy) : Unexpected error
2022/01/18 23:06:36 - dysjcq.0 - ERROR (version 7.1.0.0-12, build 1 from 2017-05-16 17.18.02 by buildguy) : org.pentaho.di.core.exception.KettleDatabaseException: 
2022/01/18 23:06:36 - dysjcq.0 - Couldn't get row from result set
2022/01/18 23:06:36 - dysjcq.0 - 
2022/01/18 23:06:36 - dysjcq.0 - Unable to get value 'Date' from database resultset, index 19
2022/01/18 23:06:36 - dysjcq.0 - HOUR_OF_DAY: 0 -> 1
2022/01/18 23:06:36 - dysjcq.0 - 
2022/01/18 23:06:36 - dysjcq.0 - 
2022/01/18 23:06:36 - dysjcq.0 - 	at org.pentaho.di.core.database.Database.getRow(Database.java:2546)
2022/01/18 23:06:36 - dysjcq.0 - 	at org.pentaho.di.core.database.Database.getRow(Database.java:2516)
2022/01/18 23:06:36 - dysjcq.0 - 	at org.pentaho.di.trans.steps.tableinput.TableInput.processRow(TableInput.java:148)
2022/01/18 23:06:36 - dysjcq.0 - 	at org.pentaho.di.trans.step.RunThread.run(RunThread.java:62)
2022/01/18 23:06:36 - dysjcq.0 - 	at java.lang.Thread.run(Thread.java:745)
2022/01/18 23:06:36 - dysjcq.0 - Caused by: org.pentaho.di.core.exception.KettleDatabaseException: 
2022/01/18 23:06:36 - dysjcq.0 - Unable to get value 'Date' from database resultset, index 19
2022/01/18 23:06:36 - dysjcq.0 - HOUR_OF_DAY: 0 -> 1
2022/01/18 23:06:36 - dysjcq.0 - 
2022/01/18 23:06:36 - dysjcq.0 - 	at org.pentaho.di.core.row.value.ValueMetaBase.getValueFromResultSet(ValueMetaBase.java:4964)
2022/01/18 23:06:36 - dysjcq.0 - 	at org.pentaho.di.core.database.BaseDatabaseMeta.getValueFromResultSet(BaseDatabaseMeta.java:2107)
2022/01/18 23:06:36 - dysjcq.0 - 	at org.pentaho.di.core.database.DatabaseMeta.getValueFromResultSet(DatabaseMeta.java:2950)
2022/01/18 23:06:36 - dysjcq.0 - 	at org.pentaho.di.core.database.Database.getRow(Database.java:2538)
2022/01/18 23:06:36 - dysjcq.0 - 	... 4 more
2022/01/18 23:06:36 - dysjcq.0 - Caused by: java.sql.SQLException: HOUR_OF_DAY: 0 -> 1
2022/01/18 23:06:36 - dysjcq.0 - 	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
2022/01/18 23:06:36 - dysjcq.0 - 	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
2022/01/18 23:06:36 - dysjcq.0 - 	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
2022/01/18 23:06:36 - dysjcq.0 - 	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
2022/01/18 23:06:36 - dysjcq.0 - 	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)
2022/01/18 23:06:36 - dysjcq.0 - 	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:85)
2022/01/18 23:06:36 - dysjcq.0 - 	at com.mysql.cj.jdbc.result.ResultSetImpl.getTimestamp(ResultSetImpl.java:939)
2022/01/18 23:06:36 - dysjcq.0 - 	at org.pentaho.di.core.row.value.ValueMetaBase.getValueFromResultSet(ValueMetaBase.java:4946)
2022/01/18 23:06:36 - dysjcq.0 - 	... 7 more
2022/01/18 23:06:36 - dysjcq.0 - Caused by: com.mysql.cj.exceptions.WrongArgumentException: HOUR_OF_DAY: 0 -> 1
2022/01/18 23:06:36 - dysjcq.0 - 	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
2022/01/18 23:06:36 - dysjcq.0 - 	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
2022/01/18 23:06:36 - dysjcq.0 - 	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
2022/01/18 23:06:36 - dysjcq.0 - 	at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
2022/01/18 23:06:36 - dysjcq.0 - 	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
2022/01/18 23:06:36 - dysjcq.0 - 	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)
2022/01/18 23:06:36 - dysjcq.0 - 	at com.mysql.cj.result.SqlTimestampValueFactory.localCreateFromDate(SqlTimestampValueFactory.java:102)
2022/01/18 23:06:36 - dysjcq.0 - 	at com.mysql.cj.result.SqlTimestampValueFactory.localCreateFromDate(SqlTimestampValueFactory.java:51)
2022/01/18 23:06:36 - dysjcq.0 - 	at com.mysql.cj.result.AbstractDateTimeValueFactory.createFromDate(AbstractDateTimeValueFactory.java:69)
2022/01/18 23:06:36 - dysjcq.0 - 	at com.mysql.cj.protocol.a.MysqlTextValueDecoder.decodeDate(MysqlTextValueDecoder.java:77)
2022/01/18 23:06:36 - dysjcq.0 - 	at com.mysql.cj.protocol.result.AbstractResultsetRow.decodeAndCreateReturnValue(AbstractResultsetRow.java:92)
2022/01/18 23:06:36 - dysjcq.0 - 	at com.mysql.cj.protocol.result.AbstractResultsetRow.getValueFromBytes(AbstractResultsetRow.java:243)
2022/01/18 23:06:36 - dysjcq.0 - 	at com.mysql.cj.protocol.a.result.ByteArrayRow.getValue(ByteArrayRow.java:91)
2022/01/18 23:06:36 - dysjcq.0 - 	... 9 more
2022/01/18 23:06:36 - dysjcq.0 - Caused by: java.lang.IllegalArgumentException: HOUR_OF_DAY: 0 -> 1
2022/01/18 23:06:36 - dysjcq.0 - 	at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:2829)
2022/01/18 23:06:36 - dysjcq.0 - 	at java.util.Calendar.updateTime(Calendar.java:3353)
2022/01/18 23:06:36 - dysjcq.0 - 	at java.util.Calendar.getTimeInMillis(Calendar.java:1782)
2022/01/18 23:06:36 - dysjcq.0 - 	at com.mysql.cj.result.SqlTimestampValueFactory.localCreateFromDate(SqlTimestampValueFactory.java:100)
2022/01/18 23:06:36 - dysjcq.0 - 	... 15 more

二、異常分析

開始發現異常,在網上尋找解決辦法。大體解決方法都是在url上添加參數如下

  1. 設置參數serverTimezone=GMT%2B8,不起作用。
  2. serverTimezone=Asia/Shanghai,不起作用。
  3. zeroDateTimeBehavior=convertToNull,不起作用。

后來,有部分數據是可以成功,通過使用 limit語句,縮小發現,其中一條錯誤數據,只要字段值為1987-04-12就報錯,這個字段是DATE類型,改成其他值就成功。找不到問題。

猜測可能跟驅動與數據不匹配造成的。驅動版本是8.0.26,數據庫版本是5.7.24。后將驅動換回自帶驅動5.1.47版本。再次運行,異常消失。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM