4.5. JDBC 连接器常见问题
ExtractNewRecordState
单个消息转换需要吗?- 否,实际上是 Debezium JDBC 连接器与其他实现的不同因素之一。虽然连接器能够像竞争者一样获取扁平化的事件,但它还可以原生处理 Debezium 的复杂更改事件结构,而无需任何特定类型的转换。
- 如果更改了列的类型,或者列被重命名或丢弃,这是否由 schema evolution 处理?
- 不,Debezium JDBC 连接器不会对现有列进行任何更改。连接器支持的模式演进非常基本。它只是将事件结构中的字段与表的列列表进行比较,然后添加表中尚未定义为列的任何字段。如果列的类型或默认值更改,连接器不会在目标数据库中调整它们。如果重命名了列,则旧列将按原样保留,连接器会将带有新名称的列附加到表中;但是,在旧列中带有数据的现有行保持不变。这些类型的架构更改应该手动处理。
- 如果列的类型没有解析为我希望的类型,那么我如何强制映射到不同的数据类型?
- Debezium JDBC 连接器使用复杂的类型系统来解析列的数据类型。有关此类型系统如何将特定字段的 schema 定义解析为 JDBC 类型的详情,请查看 第 4.1.4 节 “Debezium JDBC 连接器数据和列类型映射的描述” 部分。如果要应用不同的数据类型映射,请手动定义表来显式获取首选的列类型。
- 如何在不更改 Kafka 主题名称的情况下为表名称指定前缀或后缀?
-
要在目标表名称中添加前缀或后缀,请调整 table.name.format connector 配置属性以应用您想要的前缀或后缀。例如,若要使用
jdbc_
前缀所有表名称,请使用值jdbc_${topic}
指定table.name.format
配置属性。如果连接器订阅了名为orders
的主题,则生成的表将创建为jdbc_orders
。 - 为什么有些列会自动加引号,即使未启用标识符引用?
-
在某些情况下,可能会明确引用特定列或表名称,即使未启用
quote.identifiers
。当列或表名称以 开头或使用通常被视为非法语法的特定惯例时,这通常是必需的。例如,当将 primary.key.mode 设置为kafka
时,如果列的名称被引号,一些数据库只允许列的名称以下划线开头。引用行为是特定于临时的,不同的数据库类型会有所不同。