[英]How to add explicit WHERE clause in Kafka Connect JDBC Source connector
I am using kafka connect to source data from DB2 to kafka topic and i am configuring sql query to read the data from DB2 , below is query我正在使用 kafka 连接从 DB2 到 kafka 主题的源数据,我正在配置 sql 查询以从 DB2 读取数据,下面是查询
SELECT SEQ_I AS error_id, TRIM(SEND_I) AS sca , to_char(CREATE_TS,'YYYY-MM-DD HH24:MI:SS.FF3') AS create_timestamp, CREATE_TS, TRIM(ERR_MSG) AS error_message , CASE substr(ERR_MSG,1,locate('-',ERR_MSG)-1) WHEN 'WARNING' THEN 'W' WHEN 'SUSPENDED' THEN 'F' END ERROR_TYPE FROM INTCHG_ERROR_DIR WHERE TRAN_I ='503' AND PRCS_N = 'GLOBAL'
am using setting "timestamp.column.name": "CREATE_TS"
here problem is in the query their is already WHERE
clause , and kafka connect tried to add another where clause with timestamp column and it is creating issue and one more issue is if i remove where clause from sql clause like below我正在使用设置
"timestamp.column.name": "CREATE_TS"
这里的问题是在查询中,它们已经是WHERE
子句,而 kafka connect 尝试添加另一个带有时间戳列的 where 子句,它正在创建问题,还有一个问题是如果我从 sql 子句中删除 where 子句,如下所示
SELECT SEQ_I AS error_id, TRIM(SEND_I) AS sca , to_char(CREATE_TS,'YYYY-MM-DD HH24:MI:SS.FF3') AS create_timestamp, CREATE_TS, TRIM(ERR_MSG) AS error_message , CASE substr(ERR_MSG,1,locate('-',ERR_MSG)-1) WHEN 'WARNING' THEN 'W' WHEN 'SUSPENDED' THEN 'F' END ERROR_TYPE FROM INTCHG_ERROR_DIR
then am getting error with substr , like below然后出现 substr 错误,如下所示
SQL Error [22011]: THE SECOND OR THIRD ARGUMENT OF THE SUBSTR OR SUBSTRING FUNCTION IS OUT OF RANGE. SQLCODE=-138, SQLSTATE=22011, DRIVER=4.19.26
can anyone suggest on both is this issues , am stuck at this point .任何人都可以就这两个问题提出建议,我在这一点上被困住了。
This happens because you are trying to use both "mode": "timestamp"
and query
.发生这种情况是因为您尝试同时使用
"mode": "timestamp"
和query
。 TimestampIncrementingTableQuerier
appends a WHERE
clause to the query that conflicts with existing WHERE
clauses in the query
. TimestampIncrementingTableQuerier
将WHERE
子句附加到与查询中现有WHERE
子句冲突的query
。
JDBC source connector docs is clear on this: JDBC 源连接器文档对此很清楚:
query
If specified, the query to perform to select new or updated rows.
如果指定,则为选择新行或更新行而执行的查询。 Use this setting if you want to join tables, select subsets of columns in a table, or filter data.
如果要连接表、选择表中的列子集或过滤数据,请使用此设置。 If used, this connector will only copy data using this query -- whole-table copying will be disabled.
如果使用,此连接器将仅使用此查询复制数据——将禁用整表复制。 Different query modes may still be used for incremental updates, but in order to properly construct the incremental query, it must be possible to append a WHERE clause to this query (ie no WHERE clauses may be used).
不同的查询模式仍可用于增量更新,但为了正确构造增量查询,必须可以在此查询中附加 WHERE 子句(即不能使用 WHERE 子句)。 If you use a WHERE clause, it must handle incremental queries itself .
如果使用 WHERE 子句,它必须自己处理增量查询。
As a workaround, you can modify your query to (depending on what SQL flavour are you using)作为一种解决方法,您可以将查询修改为(取决于您使用的 SQL 风格)
SELECT * FROM ( SELECT * FROM table WHERE ...)
or或者
WITH a AS
SELECT * FROM b
WHERE ...
SELECT * FROM a
For example, in your case the query should be例如,在您的情况下,查询应该是
"query":"SELECT * FROM (SELECT SEQ_I AS error_id, TRIM(SEND_I) AS sca , to_char(CREATE_TS,'YYYY-MM-DD HH24:MI:SS.FF3') AS create_timestamp, CREATE_TS, TRIM(ERR_MSG) AS error_message , CASE substr(ERR_MSG,1,locate('-',ERR_MSG)-1) WHEN 'WARNING' THEN 'W' WHEN 'SUSPENDED' THEN 'F' END ERROR_TYPE FROM INTCHG_ERROR_DIR WHERE TRAN_I ='503' AND PRCS_N = 'GLOBAL') o"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.