Vector 转 Json

Debezium 会将 vector 数据类型列映射到具有特定逻辑语义表示的 vector 数据。如果您需要将该表示形式重新映射为更通用的格式(如 JSON),Debezium 提供了 Vector to Json 单消息转换 (SMT)。

用例

Debezium 使用以下映射来映射 vector 数据类型列

数据库 列类型 逻辑语义类型 Kafka Connect 类型

MySQL

vector

io.debezium.data.FloatVector

ARRAY

PostgreSQL

vector

io.debezium.data.DoubleVector

ARRAY

PostgreSQL

halfvec

io.debezium.data.FloatVector

ARRAY

PostgreSQL

sparsevec

io.debezium.data.SparseVector

Struct

JDBC sink

一个更清晰的用例是使用此转换来处理面向目标关系数据库(不支持 vector 数据类型)的 vector 数据类型的消耗。例如,在 23ai 之前,您无法将此类数据类型写入 Db2、SQL Server 或 Oracle 等关系数据库。VectorToJsonConverter 转换提供了一种有用但简单的方法来解决此差异,通过将事件负载中的所有 vector 数据类型字段从其各自的特定于 vector 的逻辑语义表示转换为 JSON。

使用 JSON 的主要好处是,支持 JSON 数据类型的数据库将能够本机存储该表示形式。对于没有本机 JSON 数据类型的关系数据库,它们将默认使用其各自的长文本等效数据类型。

易用性

另一个用例涉及易用性。Kafka Connect API 并不是许多人经常喜欢使用的,以更直观的格式提供数据可以简单地降低复杂性。由于 Debezium 的 JSON 语义类型是 io.debezium.data.Json,并且它在 Kafka 事件结构中本机表示为字符串值,因此使用任何 JSON 库都可以非常轻松地快速解析 JSON 详细信息。

按语义类型划分的 JSON 示例

Debezium 的逻辑语义类型包含值数组,或者是一种数据结构,该结构不仅包含值数组,还包含描述 vector 的 SQL 表示的其他属性。以下图例说明了基于 Debezium 逻辑语义类型的 JSON 输出。

DoubleVector 转换为 JSON 后
{
  "values": [1, 2, 3]
}
FloatVector 转换为 JSON 后
{
  "values": [1, 2, 3]
}
SparseVector 转换为 JSON 后
{
  "dimensions": 25,
  "vector": {
    "1": 10,
    "5": 25,
    "10": 100,
    "25": 10000
  }
}

示例

要将 vector 数据类型转换为 JSON,请在 Debezium 连接器的 Kafka Connect 配置中配置 VectorToJsonConverter

以下示例中的连接器配置将把所有 PostgreSQL vector 逻辑字段类型转换为 JSON

transforms=vectortojson
transforms.vectortojson.type=io.debezium.transforms.VectorToJsonConverter