Java 如何从映射创建架构并注册到架构注册表

Java 如何从映射创建架构并注册到架构注册表,java,avro,confluent-schema-registry,Java,Avro,Confluent Schema Registry,是否有一种从映射创建模式的方法 我有一个带有键值对的映射,并希望从中创建模式 我已经看过org.apache.avro.Schema类(来自avro-tools-1.8.2.jar),并且有下面这样的API来读取JSON并从中创建模式 public Schema parse(File file) throws IOException { return parse(FACTORY.createJsonParser(file)); } public Schema parse(I

是否有一种从映射创建模式的方法

我有一个带有键值对的映射,并希望从中创建模式

我已经看过org.apache.avro.Schema类(来自avro-tools-1.8.2.jar),并且有下面这样的API来读取JSON并从中创建模式

public Schema parse(File file) throws IOException {
      return parse(FACTORY.createJsonParser(file));
    }

public Schema parse(InputStream in) throws IOException {
      return parse(FACTORY.createJsonParser(in).disable(
              JsonParser.Feature.AUTO_CLOSE_SOURCE));
    }

public Schema parse(String s, String... more) {
      StringBuilder b = new StringBuilder(s);
      for (String part : more)
        b.append(part);
      return parse(b.toString());
    }

public Schema parse(String s) {
      try {
        return parse(FACTORY.createJsonParser(new StringReader(s)));
      } catch (IOException e) {
        throw new SchemaParseException(e);
      }
    }
有关于如何从映射创建模式的指针吗?创建模式后,我会将其注册到Confluent schema registry。

我不确定是否要解析
映射,但您可以在代码中构建模式,而不是解析JSON

范例

final Schema valueType = SchemaBuilder.builder().stringType();

Schema mapSchema = SchemaBuilder.map().values(valueType);
System.out.println(mapSchema);
// {"type":"map","values":"string"}

Schema recordSchemaWithMap = SchemaBuilder.builder("my.namespace.avro").record("MapData")
        .fields()
        .name("attributes").type(Schema.createMap(valueType)).noDefault()
        .endRecord();

System.out.println(recordSchemaWithMap);
// {"type":"record","name":"MapData","namespace":"my.namespace.avro","fields":[{"name":"attributes","type":{"type":"map","values":"string"}}]}
如果在一些
Map.Entry
值上循环并构建Schema对象,这可能会被扩展


注意:所有映射都包含字符串类型键

我建议您学习AVDL或AVSC语法并使用Avro maven插件,否则请使用AvroThanks中的SchemaBuilder类进行输入。让我试试SchemaBuilder。非常感谢分享。