簡體   English   中英

“注冊”是 Ksql 中的保留關鍵字,如果是,我如何選擇具有該名稱的字段

[英]Is "register" a reserved keyword in Ksql and if so how can I select a field with that name

我正在學習 Confluent 平台(Kafka、Ksql 等)。 我正在使用 Debezium 和 Kafka Connect 將數據流式傳輸到 Kafka 主題中。 我的數據庫表“日志”中的字段之一稱為“注冊”,它是添加記錄的時間戳。

參考表日志結構(在源MySQL數據庫中)如下:

CREATE TABLE `log` (
  `code` varchar(9) NOT NULL,
  `register` datetime NOT NULL,
  `entry` mediumtext NOT NULL,
  PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

我正在使用以下按預期工作的配置將數據從兩個數據庫中的“日志”表流式傳輸到單個 Kafka 主題中。

"transforms.topicRoute.type": "org.apache.kafka.connect.transforms.RegexRouter",
"transforms.topicRoute.regex": "([^.]+)\\.([^.]+)\\.([^.]+)",
"transforms.topicRoute.replacement": "merged.$3",

我正在嘗試建立一個 KSQL 流,該流創建一個新密鑰,該密鑰是源數據庫(來自 Debezium 生成的元數據)和日志表中的代碼字段以及表中的其余字段的串聯。 這樣做的目的是使派生密鑰在發送到接收器時是完全唯一的(當前連接到另一個 MySQL 數據庫,該數據庫包含一個日志表,其內容應該是兩個源數據庫日志表的合並副本)

我試圖運行的查詢是:

SELECT source->db + '.' + after->code AS KeyValue, after->register, after->entry FROM MERGED_LOG LIMIT 1;

但是會出現以下錯誤:

line 1:59: mismatched input 'register' expecting {'INTEGER', 'DATE', 'TIME', 'TIMESTAMP', 'INTERVAL', 'YEAR', 'MONTH', 'DAY', 'HOUR', 'MINUTE', 'SECOND', 'ZONE', 'PARTITION', 'STRUCT', 'EXPLAIN', 'ANALYZE', 'TYPE', 'SHOW', 'TABLES', 'COLUMNS', 'COLUMN', 'PARTITIONS', 'FUNCTIONS', 'FUNCTION', 'ARRAY', 'MAP', 'SET', 'RESET', 'SESSION', 'IF', IDENTIFIER, DIGIT_IDENTIFIER, QUOTED_IDENTIFIER, BACKQUOTED_IDENTIFIER}
Statement: SELECT source->db + '.' + after->code AS KeyValue, after->register, after->entry FROM MERGED_LOG LIMIT 1;
Caused by: line 1:59: mismatched input 'register' expecting {'INTEGER', 'DATE',
        'TIME', 'TIMESTAMP', 'INTERVAL', 'YEAR', 'MONTH', 'DAY', 'HOUR', 'MINUTE',
        'SECOND', 'ZONE', 'PARTITION', 'STRUCT', 'EXPLAIN', 'ANALYZE', 'TYPE', 'SHOW',
        'TABLES', 'COLUMNS', 'COLUMN', 'PARTITIONS', 'FUNCTIONS', 'FUNCTION', 'ARRAY',
        'MAP', 'SET', 'RESET', 'SESSION', 'IF', IDENTIFIER, DIGIT_IDENTIFIER,
        QUOTED_IDENTIFIER, BACKQUOTED_IDENTIFIER}
Caused by: org.antlr.v4.runtime.InputMismatchException

我看不到任何地方表明“注冊”是某種保留術語。

任何人都可以幫忙嗎? 替代方案可以建議一種在轉換過程中更改字段名稱的方法,請記住,我無法展平由 Debezium 生成的消息,因為我需要能夠訪問源數據庫名稱

  1. 是的REGISTER是一個保留字,你應該在你的 DDL 中避免它。 您可以通過引用來訪問它,值得一試。

  2. 有一個用於刪除字段的單消息轉換,但它不適用於嵌套數據。 您可以嘗試將UnwrapFromEnvelope SMT 與一個重命名字段相結合。 我還沒有嘗試過這個配置,但類似

    "transforms": "unwrap,renameField", "transforms.unwrap.type": "io.debezium.transforms.UnwrapFromEnvelope", "transforms.renameField.type": "org.apache.kafka.connect.transforms.ReplaceField$Value", "transforms.renameField.renames": "register:notareservedword",

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM