我有kafka JDBC源连接器(DB2)与值AvroConverter。在config中输入"query"用相对复杂的SQL定义。连接器基于元数据生成一个模式,并在模式注册表中执行查找。如果没有找到完全相同的模式,连接器将无法处理更多数据。我的问题是生成的模式是否保持稳定或模式取决于数据输入。
例如:
query= „SELECT CASE WHEN DAY(current_date) = 5 THEN 1 ELSE CAST(NULL AS INTEGER) END COL1 FROM SYSIBM. SYSDUMMY1“
可以在2012-03-05上生成模式为:
{
"name": "COL1",
"type": "int"
}
和在2021-03-06:
{
"name": "COL1",
"type": [
"null",
"int"
],
"default": null
}
Jdbc连接器默认情况下将DB表语义反映到Avro生成的模式。例如,如果一个列是可空的,它将为该列生成一个带有可选字段的模式(就像你在第二段代码中所做的那样)。
现在,如果你在你的查询中做一些复杂的事情(正如你提到的),推断的模式可能会改变。此场景与更改DB表模式相同(例如,添加新列或使列可空),有关此场景,请参阅jdbc连接器模式演变文档。实际上,连接器将推断出新的avro模式,并尝试将其注册到SR(如果自动)。注册是启用的(默认情况下是)。此时,模式注册中心(基于它所拥有的模式兼容性设置)将检查该主题的新模式(例如,值模式的"topicname"-value)是否与已注册的最新模式兼容。如果它是兼容的,则新的模式注册将成功,连接器将基于新的avro模式生成avro消息。