首页 > 解决方案 > JdbcSourceConnector - 不是一个有效的月份

问题描述

在我的表中,TIME_STAMP 列定义为 CHAR(23 BYTE)

连接器配置

{
    "name": "object-prule-types-Jdbc-connector",
    "config": {
        "connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector",
        "tasks.max": "1",
        "connection.url": "jdbc:oracle:thin:@//hostname:1521/ORCL",
        "connection.user": "DEV",
        "connection.password": "pass",
        "mode": "timestamp",
  
         "query":"select * from (select t.*,to_timestamp(TIME_STAMP,'YYYY-MM-DD HH24:MI:SS.FF3') TIMESTAMP_MODE_COLUMN from OBJECT_PRULE_TYPES t)",
        "topic.prefix": "m2-",
        "topic.creation.enable": "false",
        "timestamp.initial": 1631153989,    
        "value.converter": "io.confluent.connect.avro.AvroConverter",
        "value.converter.schema.registry.url": "http://schema-registry:9999",
        "schema.patternn": "ORCL",
        "catalog.pattern": "ORCL",
        "poll.interval.ms": 3000,
        "timestamp.column.name": "TIMESTAMP_MODE_COLUMN",
        "validate.non.null": false
     

    }
}

我得到以下异常

 ERROR Failed to run query for table TimestampIncrementingTableQuerier{table=null, query='select * from (select t.*,to_timestamp(TIME_STAMP,'YYYY-MM-DD HH24:MI:SS.FF3') TIMESTAMP_MODE_COLUMN from OBJECT_PRULE_TYPES t)', topicPrefix='miri-', incrementingColumn='', timestampColumns=[TIMESTAMP_MODE_COLUMN]}: {} (io.confluent.connect.jdbc.source.JdbcSourceTask)
connect            | java.sql.SQLDataException: ORA-01847: day of month must be between 1 and last day of month

我也尝试删除查询并添加转换

连接器配置:

{
    "name": "object-prule-types-Jdbc-connector",
    "config": {
        "connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector",
        "tasks.max": "1",
        "connection.url": "jdbc:oracle:thin:@//hostname:1521/ORCL",
        "connection.user": "DEV",
        "connection.password": "pass",
        "mode": "timestamp",
        "table.whitelist" : "DEV.OBJECT_PRULE_TYPES",
        "topic.prefix": "m2-",
        "topic.creation.enable": "false",
        "timestamp.initial": 1631153989,    
        "value.converter": "io.confluent.connect.avro.AvroConverter",
        "value.converter.schema.registry.url": "http://schema-registry:9999",
        "schema.patternn": "ORCL",
        "catalog.pattern": "ORCL",
        "poll.interval.ms": 3000,
        "timestamp.column.name": "TIME_STAMP",
        "validate.non.null": false,
        "transforms" :"updt_dt",
        "transforms.updt_dt.type": "org.apache.kafka.connect.transforms.TimestampConverter$Value",
         "transforms.updt_dt.target.type": "string",
         "transforms.updt_dt.field": "TIME_STAMP",
          "transforms.updt_dt.format": "yyyy-MM-dd HH:mm:ss.SSS"

    }
}

我得到以下异常:

connect            | [2021-10-05 09:15:48,502] ERROR Failed to run query for table TimestampIncrementingTableQuerier{table="MIRI_RULE_DEV"."OBJECT_PRULE_TYPES", query='null', topicPrefix='miri-', incrementingColumn='', timestampColumns=[TIME_STAMP]}: {} (io.confluent.connect.jdbc.source.JdbcSourceTask)
connect            | java.sql.SQLDataException: ORA-01843: not a valid month
connect            |
connect            |    at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:494)
connect            |    at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:446)
connect            |    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1054)
connect            |    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:623)
connect            |    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:252)
connect            |    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:612)
connect            |    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:226)
connect            |    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:59)
connect            |    at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:747)
connect            |    at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:904)
connect            |    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1082)
connect            |    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3780)
connect            |    at oracle.jdbc.driver.T4CPreparedStatement.executeInternal(T4CPreparedStatement.java:1343)
connect            |    at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3822)
connect            |    at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1165)
connect            |    at io.confluent.connect.jdbc.source.TimestampIncrementingTableQuerier.executeQuery(TimestampIncrementingTableQuerier.java:178)
connect            |    at io.confluent.connect.jdbc.source.TableQuerier.maybeStartQuery(TableQuerier.java:92)
connect            |    at io.confluent.connect.jdbc.source.TimestampIncrementingTableQuerier.maybeStartQuery(TimestampIncrementingTableQuerier.java:61)
connect            |    at io.confluent.connect.jdbc.source.JdbcSourceTask.poll(JdbcSourceTask.java:315)
connect            |    at org.apache.kafka.connect.runtime.WorkerSourceTask.poll(WorkerSourceTask.java:265)
connect            |    at org.apache.kafka.connect.runtime.WorkerSourceTask.execute(WorkerSourceTask.java:232)
connect            |    at org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:177)
connect            |    at org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:227)
connect            |    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
connect            |    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
connect            |    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
connect            |    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
connect            |    at java.lang.Thread.run(Thread.java:748)
connect            | Caused by: Error : 1843, Position : 57, Sql = SELECT * FROM "DEV"."OBJECT_PRULE_TYPES" WHERE "DEV"."OBJECT_PRULE_TYPES"."TIME_STAMP" > :1  AND "DEV"."OBJECT_PRULE_TYPES"."TIME_STAMP" < :2  ORDER BY "DEV"."OBJECT_PRULE_TYPES"."TIME_STAMP" ASC, OriginalSql = SELECT * FROM "DEV"."OBJECT_PRULE_TYPES" WHERE "DEV"."OBJECT_PRULE_TYPES"."TIME_STAMP" > ? AND "DEV"."OBJECT_PRULE_TYPES"."TIME_STAMP" < ? ORDER BY "DEV"."OBJECT_PRULE_TYPES"."TIME_STAMP" ASC, Error Msg = ORA-01843: not a valid month

标签: oraclejdbcapache-kafkaapache-kafka-connect

解决方案


推荐阅读