#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
вместо этого использовать файлы, которые соответствующим образом расширяют вложенные типы при создании окончательных файлов схемы avsc2. Эй, Сигой, ты когда-нибудь это понимал? Я сталкиваюсь с той же проблемой, ссылающейся на схему из другой схемы.
3. @davidmerrick как предположил вышеупомянутый комментатор, в итоге я написал файлы avdl с правильным импортом и добавил шаг сборки для создания файлов avsc (avro-tools idl2schemata, если я не ошибаюсь).
4. Спасибо, @Sigoy! Значит, вы должны по существу внедрять схему, а не импортировать ее? Я также пытался определить, работает ли импорт в реестре схемы склеивания с помощью Avro, и, похоже, это не так.
5. Да, этап сборки встраивает вложенные типы, но они сериализуют / десериализуют в правильные (сгенерированные) классы Java, что и было тем, что я искал в этом конкретном проекте. Я никогда не получал импорт для работы с этим реестром.