Как добавить несколько типов для поля при создании схемы Avro?

149
11 августа 2019, 17:00

есть метод для создания схемы Avro:

public void schemaCreator(String recordName, EntityModel entityModel){
        SchemaBuilder.FieldAssembler<Schema> fields;
        SchemaBuilder.RecordBuilder<Schema> record = SchemaBuilder.record(recordName);
        fields = record.namespace("Test").fields();
        for (AttributeModel attributeModel : entityModel.getAttributeModels()) {

            fields = fields.name(attributeModel.getName()).type().nullable().stringType()
                    .noDefault();
        }
    }

В результате имеем схему:

{
 "type":"record",
 "name":"InfoData",
 "namespace":"Test",
 "fields":[
   {
    "name":"Setting",
    "type":["string","null"]
   },
   {
    "name":"Value",
    "type":["string","null"]}]
   }

Как добавить несколько типов для поля? Например: "type":["string","long","boolean","null"]}]

Answer 1

Вот вариант решения, таким образом можно формировать список типов в цикле:

public void schemaCreator(String recordName, EntityModel entityModel){
        SchemaBuilder.FieldAssembler<Schema> fields;
        SchemaBuilder.RecordBuilder<Schema> record = SchemaBuilder.record(recordName);
        fields = record.namespace("Test").fields();
        final Schema intType = Schema.create(Schema.Type.INT);
        final Schema booleanType = Schema.create(Schema.Type.BOOLEAN);
        final Schema nullType = Schema.create(Schema.Type.NULL);
        for (AttributeModel attributeModel : entityModel.getAttributeModels()) {
            Schema unionSchema = Schema.createUnion(Arrays.asList(nullType, intType, booleanType));
            fields.name(attributeModel.getName()).type(unionSchema).noDefault();
        }
    }
READ ALSO
Рисование поверх превью камеры

Рисование поверх превью камеры

Хочу вывести превью камеры на дисплей и нарисовать квадрат в области тачаПревью получить удалось, но не могу грамотно реализовать отрисовку

103
Responsive clip-path

Responsive clip-path

В следующем примере блок main (синезелёный градиент) обрезается при помощи clip-path и принимает форму сердечкаОднако видно, что он обрезается...

120
flexbox, текст не переноситься во вложенном flexbox в ie11

flexbox, текст не переноситься во вложенном flexbox в ie11

В IE11 из-за вложенного флексбокса текст не переходит на следующую строку, а растягивается на весь контент, если же поставить дляitem width:100%, блоки...

80
Эффект вождения пальцем по воде

Эффект вождения пальцем по воде

Не знал, как точно сформировать вопрос, поэтому сразу прошу прощения

120