avro - 在 Apache NiFi 中定义 Apache Avro Schema 全名
问题描述
使用 NiFi 1.7.1(它使用 Java Avro 1.8.1)并在 AvroSchemaRegistry 中,我试图定义一个具有字段name
和app.name
顶层的模式。根据 Avro docs[1],我假设我可以像正常一样定义全名,"name": "app.name"
但我遇到了错误Illegal character in: app.name
。确实,全名的名称部分不允许使用点,但根据文档:“如果指定的名称包含点,则假定它是全名......”
然后我尝试使用命名空间字段。使用以下架构:
{
"type": "record",
"name": "nameRecord",
"fields": [
{
"type": [
"string",
"null"
],
"name": "name"
},
{
"type": [
"string",
"null"
],
"namespace": "app",
"name": "name"
}
]
}
我遇到了这个错误:Duplicate field name in record nameRecord: name type:UNION pos:1 and name type:UNION pos:0
最终,我希望能够为这样的记录定义一个模式(在 JSON 中):
{
"name": "Joe",
"app.name": "NiFi"
}
解决方案
根据文档,命名空间仅支持记录、枚举和固定类型,其他字段必须遵守句点 (.) 不是有效字符的“常规”命名约定。
但是,从 NiFi 1.5.0(通过NIFI-4612 )开始,您可以在AvroSchemaRegistry中指定架构,并将“验证字段名称”设置为 false。这应该允许您绕过字段名称为的限制app.name
。
推荐阅读
- c - C中的复合文字存储持续时间
- python - 给定一个字典和一个键,“get_nth_element_of_value”返回位于给定键的列表的第 n 个元素
- node.js - 我如何在总和查询中使用strapi
- excel - 如何在excel中的数字之间添加逗号?
- node.js - 开玩笑 TypeScript 错误 axios_1.default.post.mockImplementation is not a function
- javascript - 有没有办法使用 Angular 和 SyncFusion 数据网格创建动态行编号列?
- c# - 不接受具有 (",') 等特殊字符的数据表 Json。“显示缺失)”错误
- c++ - Qt 自定义 QPushButton 不显示在布局上
- python - PyQt5 - QTabBar 中缺少关闭按钮图标
- wordpress - 密码存储在 wordpress 数据库中表 wp_users 中