如何验证 Avro 架构文件的格式以查看其是否符合 Apache Avro 规范

问题描述 投票:0回答:3

我们的系统必须处理 Avro 模式。在将 Avro 模式文件发送到服务器之前,我想验证提交的模式文件的格式,看看它是否符合 Apache Avro 规范。

Avro 模式是一个 Json 文件,因此要根据 Avro 规范进行基本验证,我需要 Avro 模式文件的 Json 模式(我知道这听起来很混乱)。不幸的是,Apache Avro 规范没有为我可以通过验证器运行的 Avro 架构提供任何定义文件。

有谁知道我在哪里可以找到根据 Apache Avro 规范定义 Avro 架构文件结构的 Json 架构?

avro jsonschema
3个回答
0
投票

如果您有 Avro 文件,则该文件包含架构本身,因此已经是“有效的”。如果无法使用您给定的模式创建文件,那么您应该得到一个异常(或者,至少,任何无效的属性将被忽略)

您可以通过

获取该架构
java -jar avro-tools.jar getschema file.avro

我不知道如何使用不同的架构来获取文件而不通过 Avro 客户端库读取器方法


0
投票
@Test
void testSchema() throws IOException {
  Schema classSchema = FooEvent.getClassSchema();
  Schema sourceSchema = new Schema.Parser()
    .parse(getClass()
    .getResourceAsStream("/path/to/FooEvent.avsc"));
  assertThat(classSchema).isEqualTo(sourceSchema);
}

0
投票

您可以在 apache.org 下载 avro-tools.jar 然后使用

random
工具。它创建随机生成的模式实例。当您的架构不符合规范时,它还会在生成实例之前显示警告

例如

java  -jar ./avro-tools-1.12.0.jar random --schema-file your_schema.avsc --count 1  -

24/12/03 16:58:25 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
24/12/03 16:58:26 WARN avro.Schema: Ignored the com.c.um.avro.p.r_timestamp.logicalType property ("timestamp-millis"). It should probably be nested inside the "type" for the field.

我发现使用 JSON 模式来验证 .avsc 文件是不够的

© www.soinside.com 2019 - 2024. All rights reserved.