Импорт реестра схемы склеивания AWS

#amazon-web-services #avro #aws-glue

#amazon-веб-сервисы #avro #aws-glue

Вопрос:

При создании классов Java из схем Avro avro-maven-plugin я могу импортировать пользовательские типы для повторного использования в схемах.

shared/child_type.avsc

 {
  "namespace": "my.namespace",
  "type": "record",
  "name": "ChildType",
  "fields": [ ... ]
}

 

parent_type.avsc . См field_of_custom_type . поле.

 {
  "namespace": "my.namespace",
  "type": "record",
  "name": "ParentType",
  "fields": [
    {
      "name": "field_of_custom_type",
      "type": "my.namespace.ChildType"
    }
  ]
}

 

pom.xml . См. Раздел Импорт.

             <plugin>
                <groupId>org.apache.avro</groupId>
                <artifactId>avro-maven-plugin</artifactId>
                <version>${avro.version}</version>
                <configuration>
                    <sourceDirectory>${avro.sourceDirectory}</sourceDirectory>
                    <outputDirectory>${avro.outputDirectory}</outputDirectory>
                    <imports>
                        <import>${avro.sourceDirectory}/shared</import>
                    </imports>
                </configuration>
                <executions>
                    <execution>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>schema</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
 

Насколько я понимаю, это поддерживается в реестре Confluent Schema (https://github.com/confluentinc/schema-registry/issues/523 ) тоже.

Возможно ли это также в реестре схемы склеивания AWS?

Соответствующее сообщение об ошибке:

InvalidInputException: определение схемы неверно: «my.namespace.Дочерний тип» не является определенным именем. Типом поля «field_of_custom_type» должно быть определенное имя или выражение {«type»: …}.

Комментарии:

1. Я предлагаю avdl вместо этого использовать файлы, которые соответствующим образом расширяют вложенные типы при создании окончательных файлов схемы avsc

2. Эй, Сигой, ты когда-нибудь это понимал? Я сталкиваюсь с той же проблемой, ссылающейся на схему из другой схемы.

3. @davidmerrick как предположил вышеупомянутый комментатор, в итоге я написал файлы avdl с правильным импортом и добавил шаг сборки для создания файлов avsc (avro-tools idl2schemata, если я не ошибаюсь).

4. Спасибо, @Sigoy! Значит, вы должны по существу внедрять схему, а не импортировать ее? Я также пытался определить, работает ли импорт в реестре схемы склеивания с помощью Avro, и, похоже, это не так.

5. Да, этап сборки встраивает вложенные типы, но они сериализуют / десериализуют в правильные (сгенерированные) классы Java, что и было тем, что я искал в этом конкретном проекте. Я никогда не получал импорт для работы с этим реестром.