【问题标题】:Defining Apache Avro Schema fullname in Apache NiFi在 Apache NiFi 中定义 Apache Avro Schema 全名
【发布时间】:2019-02-19 17:52:40
【问题描述】:

使用 NiFi 1.7.1(它使用 Java Avro 1.8.1)并在 AvroSchemaRegistry 中,我试图定义一个架构,该架构在顶层具有字段 nameapp.name。根据 Avro 文档 [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"
}

[1]https://avro.apache.org/docs/1.8.1/spec.html#names

【问题讨论】:

    标签: avro apache-nifi


    【解决方案1】:

    根据the docs,命名空间仅支持记录、枚举和固定类型,其他字段必须遵守句点 (.) 不是有效字符的“常规”命名约定。

    但是,从 NiFi 1.5.0(通过 NIFI-4612)开始,您可以在 AvroSchemaRegistry 中指定架构,并将“验证字段名称”设置为 false。这应该允许您绕过字段名称为app.name 的限制。

    【讨论】:

    • 谢谢马特,哈哈,有时候你只是盲目而忽略了显而易见的事情。
    猜你喜欢
    • 1970-01-01
    • 2017-07-18
    • 2020-10-01
    • 2017-01-08
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    相关资源
    最近更新 更多