3.4. Debezium Db2 连接器如何映射数据类型
Db2 的数据类型在 Db2 SQL 数据类型 中进行了描述。
Db2 连接器代表对带有类似于行存在的表的事件的更改。event 包含每个列值的字段。该值在事件中如何代表取决于该列的 Db2 数据类型。这部分论述了这些映射。如果默认数据类型转换无法满足您的需要,您可以为连接器 创建自定义转换器。
详情包括在以下部分:
基本类型
下表描述了连接器如何将每个 Db2 数据类型映射到 字面类型和 事件字段中 的语义类型。
-
literal type 描述了如何使用 Kafka Connect 模式类型来表示:
INT8
,INT16
,INT32
,INT64
,FLOAT32
,FLOAT64
,BOOLEAN
,STRING
,BYTES
, ARRAY,
MAP
, 和STRUCT
。 - 语义类型 描述了 Kafka Connect 模式如何使用字段名称来捕获字段 的含义。
表 3.10. Db2 基本数据类型的映射
Db2 数据类型 | 字面类型(架构类型) | 语义类型(架构名称)和备注 |
---|---|---|
|
| 只能从具有 BOOLEAN 类型列的表中获取快照。目前,Db2 上的 SQL Replication 不支持 BOOLEAN,因此 Debezium 无法在这些表上执行 CDC。考虑使用不同的类型。 |
|
| 不适用 |
|
| 不适用 |
|
| 不适用 |
|
| 不适用 |
|
| 不适用 |
|
|
|
|
|
|
|
|
|
|
| 不适用 |
|
| 不适用 |
|
| 不适用 |
|
| 不适用 |
|
| 不适用 |
|
|
|
|
|
|
|
| 不适用 |
|
| 不适用 |
|
| 不适用 |
|
|
|
如果存在,列的默认值会被传播到对应的字段的 Kafka Connect 模式。更改事件包含字段的默认值,除非给出了显式列值。因此,很少需要从 schema 获取默认值。
临时类型
除 Db2 的 DATETIMEOFFSET
数据类型外,其中包含时区信息,如何映射 temporal 类型取决于 time.precision.mode
连接器配置属性的值。以下小节描述了这些映射:
time.precision.mode=adaptive
当 time.precision.mode
配置属性设为 adaptive
时,默认连接器根据列的数据类型定义决定字面类型和语义类型。这样可确保事件 完全 表示数据库中的值。
表 3.11. time.precision.mode
被适应 的映射
Db2 数据类型 | 字面类型(架构类型) | 语义类型(架构名称)和备注 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
time.precision.mode=connect
当 time.precision.mode
配置属性设为 connect
时,连接器将使用 Kafka Connect 逻辑类型。当消费者只能处理内置的 Kafka Connect 逻辑类型且无法处理变量精度时间值时,这很有用。但是,因为 Db2 支持十分之一微秒的精度,使用 connect
时间精度的连接器会在数据库列带有 fractional second precision 值大于 3 时,导致精度下降。
表 3.12. time.precision.mode
为 connect
时的映射
Db2 数据类型 | 字面类型(架构类型) | 语义类型(架构名称)和备注 |
---|---|---|
|
|
|
|
|
|
|
|
|
时间戳类型
DATETIME
类型代表没有时区信息的时间戳。这些列根据 UTC 转换为等同的 Kafka Connect 值。例如,DATETIME
值 "2018-06-20 15:13:16.945104" 由 io.debezium.time.Timestamp
代表,值为 "1539)07596000"。
运行 Kafka Connect 和 Debezium 的 JVM 的时区不会影响这个转换。
表 3.13. 十进制类型
Db2 数据类型 | 字面类型(架构类型) | 语义类型(架构名称)和备注 |
---|---|---|
|
|
|
|
|
|