java - 有没有办法在 avdl 文件中定义类似数字的枚举

标签 java avro

我知道由

定义的“正常”avro 枚举
enum ActionType {CREATE, REMOVE}

在.avdl 文件中 或者通过 avro 模式中的这种类型的构造:

{ "type": "enum",
  "name": "ActionType",
  "symbols" : ["CREATE", "REMOVE"]
}

问题是我的特定实体将具有可以具有值的字段 “01”和“02”。

所以我的问题是: 1. 这是正确的 avro 枚举定义吗

{ "type": "enum",
  "name": "MyType",
  "symbols" : ["01", "02"]
}

否则我必须选择简单

{"name":"id","type":{"type":"string","avro.java.string":"String"}}
  • 有没有办法在avdl文件中编写这样的枚举(我更喜欢使用avro-maven-plugin)?
  • 最佳答案

    1. 不,不幸的是,这不是有效的 Avro 架构。该规范规定符号的第一个字符必须是 a-z 或下划线。请注意有关与正则表达式匹配的符号的部分。

    symbols: a JSON array, listing symbols, as JSON strings (required). All symbols in an enum must be unique; duplicates are prohibited. Every symbol must match the regular expression [A-Za-z_][A-Za-z0-9_]* (the same requirement as for names).

    https://avro.apache.org/docs/current/spec.html#Enums

  • 由于问题 1 的答案是否定的,因此问题 2 的答案是否定的,因此您无法定义其中符号以数字开头的有效枚举。
  • 您可能需要考虑一种将原始值“01”、“02”转换为 Avro 枚举符号“VALUE_01”、“VALUE_02”的转换层。这必须在您的应用程序代码中定义。它不是 Avro 提供的功能。或者,您可以像您建议的那样将其定义为 string 。这可能是最快的解决方案,但没有像枚举那样明确定义和限制可能的值。

    关于java - 有没有办法在 avdl 文件中定义类似数字的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58804262/

    相关文章:

    JAVA - 简单的 GET 请求,使用 SSL 证书和 HTTPS

    java - 无法通过 Internet 从 PC 服务器接收 Android 上的 UDP 数据

    java - 使用流来查找最高的唯一值

    java - Flink 1.4 AvroUtils 报错

    java - Avro - 反序列化 POJO

    scala - 如何使用 Scala 生成 avro 文件

    java - 读取 Avro 文件给出 AvroTypeException : missing required field error (even though the new field is declared null in schema)

    java - 在 Java 中将十进制( double )值 < 0.001 转换为字符串

    java - 一起使用 .or 和 .link 进行查询不起作用

    java - 带有 avro 中数组的嵌套映射的动态模式 - 获取 ClassCastException