gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 21:35:16 25 4
gpt4 key购买 nike

我知道由

定义的“正常”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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com