向量数据类型到 JSON 类型
向量转 JSON
Debezium 会以特定的逻辑语义表示来映射向量数据类型的列。如果你需要将这种表示重新映射为更通用的形式(例如 JSON),Debezium 提供了“向量转 JSON”单消息转换(SMT)。
使用场景
Debezium 使用以下映射关系来映射向量数据类型的列:
| 数据库 | 列类型 | 逻辑语义类型 | 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
较为明确的使用场景之一,是利用此转换来处理向量数据类型的消费,以便将数据写入不支持向量数据类型的目标关系型数据库。例如,你无法将这类数据类型写入 Db2、SQL Server 或 23ai 之前的 Oracle 等关系型数据库。VectorToJsonConverter 转换提供了一种简单而有效的方式,通过将事件负载中所有向量数据类型字段从各自特定的向量逻辑语义表示转换为 JSON,来解决这一差异。
使用 JSON 的主要好处在于,支持 JSON 数据类型的数据库可以原生存储该表示。对于没有原生 JSON 数据类型的关系型数据库,它们会默认使用各自等价的长文本数据类型。
易用性
另一个使用场景是易用性。Kafka Connect API 并不是大多数人熟悉使用的接口,而以更直观的格式提供数据可以降低复杂性。由于 Debezium 的 JSON 语义类型为 io.debezium.data.Json,并且在 Kafka 事件结构中原生表示为字符串值,因此使用任意 JSON 库快速解析 JSON 详情非常容易。
按语义类型列举的 JSON 示例
Debezium 的逻辑语义类型要么由值数组组成,要么由一个数据结构组成,该结构不仅包含值数组,还包含描述向量 SQL 表示的其他属性。以下展示了基于 Debezium 逻辑语义类型转换为 JSON 后的输出。
DoubleVector 转换为 JSON 后
{
"values": [1, 2, 3]
}FloatVector 转换为 JSON 后的形式
{
"values": [1, 2, 3]
}转换为 JSON 后的 SparseVector
{
"dimensions": 25,
"vector": {
"1": 10,
"5": 25,
"10": 100,
"25": 10000
}
}示例
要将向量数据类型转换为 JSON,请在 Debezium 连接器的 Kafka Connect 配置中配置 VectorToJsonConverter。
以下示例中的连接器配置会将所有 PostgreSQL 向量逻辑字段类型转换为 JSON:
transforms=vectortojson
transforms.vectortojson.type=io.debezium.transforms.VectorToJsonConverter评论
登录后参与评论
KnowForge