我有一个配置好的源连接器,从DB2检索并使用时间戳模式。例如:
"name": "my-jdbc-connector",
"config": {
"connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector",
"connection.url": "jdbc:db2://db2server.mycompany.com:4461/myDB",
"connection.user: "dbUser",
"connection.password": "dbPass",
"dialect.name": "Db2DatabaseDialect",
"mode": "timestamp",
"query": "select fname, lname, custId, custRegion, lastUpdate from CustomerMaster",
"timestamp.column.name": "lastUpdate",
"table.types": "TABLE",
"topic.prefix": "master.customer"
}
}
我需要使用"with UR"(带有未提交的读取,也称为"脏读取"(作为选择的一部分,这样就不会锁定我正在查询的表。
但是,当使用时间戳模式时,KafkaConnect会附加到where子句的末尾,就像中一样
where lastUpdate between '10/12/2019' and '10/14/2019';
DB2要求"with UR"是where子句中的最后一个内容。有人知道这样操纵where子句是否可行吗?我目前还不知道时间戳模式和"with UR"是如何共存的。
您不能在JDBC Kafka连接器上传递动态查询。JDBC连接器用于通过使用基于时间戳的高水印来增量加载数据。这允许用非常少的配置代码将数据从数据库中带到Kafka主题中。因此,考虑到这一点,您不需要为增量添加where子句,但是,如果您希望为静态查询使用where子句,您可以如下所述:
- 按如下方式使用子查询
"查询":"从(选择fname、lname、custId、custRegion,来自CustomerMaster的lastUpdate,其中lastUpdate在"2019年10月12日"之间和‘10/14/2019’(o〃;,
- 在CustomerMaster表上创建视图,并在JDBC连接器上使用视图
您可以参考此处了解更多详细信息
您可以通过将原始查询包装在SELECT * FROM ( your query here)
中来欺骗Kafka connect时间戳模式附加的where子句,并且Kafka connection where子句将正确地附加在末尾,这允许查询运行,检测机制也将正确工作,因此结果是:
SELECT * FROM ( your query here) WHERE timestampColumn> ? AND timestampColumn < ? ORDER BY timestampColumnASC