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