Как создать схему из карты и зарегистрироваться в реестре схем - PullRequest
0 голосов
/ 29 августа 2018

Есть ли способ создать схему из карты.

У меня есть карта с парами ключ-значение, и я хочу создать схему из этого.

Я видел класс 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.

1 Ответ

0 голосов
/ 17 сентября 2018

Я не уверен насчет синтаксического анализа a Map<String, ?>, но вы можете построить схему в коде, а не анализировать 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

Примечание: все карты содержат строковые ключи

...