如何从包含二进制格式的 avro 消息的文件中 read/parse *仅* JSON 模式?

How to read/parse *only* the JSON schema from a file containing an avro message in binary format?

我在文件中有二进制格式的 avro 消息。

Obj^A^D^Vavro.schemaÞ^B{"type":"record","name":"rec","namespace":"ns","fields":[{"name":"id","type":["int","null"]},{"name":"name","type":["string","null"]},{"name":"foo_id","type":["int","null"]}]}^Tavro.codec^Lsnappy^@¤²/n¹¼Bù<9b> à«_^NÌ^W

我只对 SCHEMA 感兴趣。有没有办法 read/parse 仅来自该文件的架构?我目前正在手动解析此文件以提取模式,但我希望 avro 能帮助我找到一种标准的方法。

Avro 确实提供了 API 从文件中获取模式:

    File file = new File("myFile.avro")

    FileReader<?> reader = DataFileReader.openReader(file, new GenericDatumReader<>());
    Schema schema = reader.getSchema();
    System.out.println(schema);

我认为它应该符合您对“只是模式”的定义,如果不符合请告诉我。

如果您没有理由以编程方式执行此操作,您也可以使用 avro-tools 中的 getschema 命令。

使用 avro-tools 是从 avro 文件中获取 avro 模式的最快和最简单的方法。只需使用以下命令:

avro-tools getchema myfile.avro > myfile.avsc