Apache Avro 模式格式化器和验证器
指导
Apache Avro Schema Formatter & Validator
粘贴一个Apache Avro JSON模式,并在浏览器中将其美化和验证,以符合官方Avro规范。该工具能够发现普通JSON语法检查器或大语言模型(LLM)会忽略的问题——无效的类型联合、默认值与第一个联合分支不匹配、重复的字段名称、未解析的命名类型引用、违反命名规则的枚举符号等。
它还生成 解析标准形式 由Avro规范定义,这是用于模式指纹识别和生产者/消费者兼容性检查的确定性表示形式。
如何使用
- 将您的
.avsc将模式(一个JSON文档)粘贴到输入区域,或直接拖放文件到上传器。 - 选择您想要的格式化输出的缩进样式——2个空格、4个空格、一个制表符,或完全压缩。
- 可选地勾选 按字母顺序排序对象键 以实现跨模式版本的确定性差异。
- 勾选 输出解析标准形式 当您需要使用规范定义的指纹输入时。在这种模式下,缩进和排序选项将被忽略。
- 查看输出上方的绿色/红色状态栏——它显示有效/无效情况,以及记录、字段、枚举、联合和固定类型的数量。警告信息(例如,非空默认值与第一个联合分支不匹配)会出现在其下方。
- 使用输出区域的复制或下载按钮来导出美化后的模式。
特征
- 严格的Avro规范验证 ——检查基本类型和复杂类型、名称和命名空间语法、联合分支规则以及重复命名类型检测。
- 默认值兼容性 ——验证每个字段的默认值与其声明类型是否匹配,特别处理联合的第一个分支规则。
- 命名类型解析 ——解析像
com.example.User这样的引用,与同一文档中更早的定义进行匹配。 - 解析标准形式 ——生成规范定义的确定性JSON,用于模式指纹。
- 格式化选项 ——支持2/4个空格、制表符或压缩输出,可选地对键进行字母排序以实现稳定的差异。
- 内联统计信息 ——每次验证后都会显示记录、字段、枚举、联合和固定类型的数量。
- 完全在浏览器中运行 ——不会将任何模式上传到服务器,因此该工具适用于专有或内部模式。
常问问题
-
什么是Apache Avro?
Apache Avro 是一种基于行的数据序列化系统,在Hadoop和Kafka生态系统中被广泛使用。它使用JSON模式来描述数据,并将数据负载序列化为紧凑的二进制格式。模式随数据一起传输(或被引用),这使得Avro在演进的数据管道中非常流行。
-
为什么Avro的默认值必须与联合的第一个分支匹配?
Avro读取器通过将写入者的分支索引与读取器的兼容分支进行匹配来解析联合。当数据中缺少某个字段时,读取器无法查看索引,因此规范要求默认值必须能表示为读取器联合的第一个分支。这就是为什么空字段通常被写成 ['null', T] 并带有null默认值。
-
什么是解析标准形式?
它是由Avro规范定义的标准化JSON序列化形式。短名称被替换为完整限定名称,非必要的属性(如doc和别名)被移除,键顺序被固定,所有空白字符被移除。当两个模式在语义上等价时,即使它们的原始JSON不同,也会生成相同的解析标准形式(和相同的指纹)。
-
命名空间是如何解析的?
不带点号的名称由最内层的命名空间进行限定。包含点号的名称被视为完整名称并原样使用。每个记录、枚举和固定类型必须在模式文档内具有唯一的全名。
-
是否支持逻辑类型?
像decimal、date、time-millis和timestamp-millis这样的逻辑类型只是带有额外注释的原始Avro类型。该工具验证底层原始类型,并在美化输出中保留逻辑类型元数据,但不会强制执行逻辑类型特定的约束(例如,decimal的精度和比例)。
