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 模式如何使用字段名称来捕获字段 的含义
Expand
表 3.12. Db2 基本数据类型的映射
Db2 数据类型字面类型(schema 类型)语义类型(模式名称)和备注

布尔值

布尔值

只有快照可以从带有 BOOLEAN 类型列的表中获取。目前,Db2 上的 SQL 复制不支持 BOOLEAN,因此 Debezium 无法在这些表上执行 CDC。考虑使用其他类型的类型。

BIGINT

INT64

不适用

二进制

BYTES

不适用

BLOB

BYTES

不适用

CHAR[(N)]

字符串

不适用

CLOB

字符串

不适用

DATE

INT32

io.debezium.time.Date

代表没有时区信息的时间戳

DECFLOAT

BYTES

org.apache.kafka.connect.data.Decimal

十进制

BYTES

org.apache.kafka.connect.data.Decimal

DBCLOB

字符串

不适用

DOUBLE

FLOAT64

不适用

整数

INT32

不适用

REAL

FLOAT32

不适用

SMALLINT

INT16

不适用

时间

INT32

io.debezium.time.Time

字符串表示没有时区信息

TIMESTAMP

INT64

io.debezium.time.MicroTimestamp

字符串表示没有时区信息的时间戳

VARBINARY

BYTES

不适用

VARCHAR[(N)]

字符串

不适用

VARGRAPHIC

字符串

不适用

XML

字符串

io.debezium.data.Xml

字符串表示 XML 文档

如果存在,则列的默认值会被传播到对应字段的 Kafka Connect 模式。更改事件包含字段的默认值,除非给出了显式列值。因此,很少需要从 schema 获取默认值。

时序类型

除了包含时区信息的 DATETIMEOFFSET 数据类型外,Db2 根据 time.precision.mode 连接器配置属性值来映射临时类型。以下小节描述了这些映射:

time.precision.mode=adaptive

当将 time.precision.mode 配置属性设置为 adaptive 时,连接器会根据列的数据类型定义决定字面 type 和 semantic 类型。这样可确保事件 完全 代表数据库中的值。

Expand
表 3.13. time.precision.mode 为 adaptive时的映射
Db2 数据类型字面类型(schema 类型)语义类型(模式名称)和备注

DATE

INT32

io.debezium.time.Date

代表自时期起的天数。

TIME (0), TIME (1), TIME (2), TIME (3)

INT32

io.debezium.time.Time

代表过去的毫秒数,不包括时区信息。

TIME (4), TIME (5), TIME (6)

INT64

io.debezium.time.MicroTime

代表过去的微秒数,不包括时区信息。

TIME (7)

INT64

io.debezium.time.NanoTime

代表过去午夜的纳秒数量,不包括时区信息。

DATETIME

INT64

io.debezium.time.Timestamp

代表自 epoch 后的毫秒数,不包括时区信息。

time.precision.mode=connect

当将 time.precision.mode 配置属性设为 connect 时,连接器会使用 Kafka Connect 逻辑类型。当消费者只能处理内置的 Kafka Connect 逻辑类型,且无法处理变量-precision 时间值时,这非常有用。但是,因为 Db2 支持十分之一微秒的精度,使用 connect 时间精度的连接器会在数据库列带有 fractional second precision 值大于 3 时,导致精度下降

Expand
表 3.14. 当 time.precision.mode 为 connect时映射
Db2 数据类型字面类型(schema 类型)语义类型(模式名称)和备注

DATE

INT32

org.apache.kafka.connect.data.Date

代表自 epoch 后的天数。

TIME([P])

INT64

org.apache.kafka.connect.data.Time

代表自午夜起的毫秒数,不包括时区信息。Db2 允许 P 在 0-7 范围内存储最多 10 个微秒的精度,但当 P 大于 3 时,这个模式会导致精度丢失。

DATETIME

INT64

org.apache.kafka.connect.data.Timestamp

代表自 epoch 起的毫秒数,不包括时区信息。

时间戳类型

DATETIME 类型代表一个没有时区信息的时间戳。此类列根据 UTC 转换为对等的 Kafka Connect 值。例如,DATETIME 值 "2018-06-20 15:13:16.945104" 由一个带有值 "1529507596000" 的 io.debezium.time.Timestamp 代表。

运行 Kafka Connect 和 Debezium 的 JVM 时区不会影响此转换。

Expand
表 3.15. 十进制类型
Db2 数据类型字面类型(schema 类型)语义类型(模式名称)和备注

NUMERIC[(P[,S])]

BYTES

org.apache.kafka.connect.data.Decimal

scale schema 参数包含一个整数,代表十进制点被转换了多少位。connect.decimal.precision schema 参数包含一个整数,代表给定十进制值的精度。

DECIMAL[(P[,S])]

BYTES

org.apache.kafka.connect.data.Decimal

scale schema 参数包含一个整数,代表十进制点被转换了多少位。connect.decimal.precision schema 参数包含一个整数,代表给定十进制值的精度。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat