这个问题涉及 Avro 版本 1.8.1。
我们的 AVRO 模式中有以下字段:
"name" : "sale_price",
"type" : ["bytes", "null"],
"logicalType": "decimal",
"precision": 18,
"scale": 17,
如您所见,该字段的逻辑类型已定义为decimal
.
但是当我们使用avro-maven-plugin
,它不会在生成的 Java 源文件中生成正确的数据类型。
相反,它会生成,java.nio.ByteBuffer
。
如何在 Java 文件中生成正确的数据类型?
这是我们的插件配置:
<plugin>
<groupId>org.apache.avro</groupId>
<artifactId>avro-maven-plugin</artifactId>
<version>1.8.1</version>
<configuration>
<stringType>String</stringType>
<enableDecimalLogicalType>true</enableDecimalLogicalType>
</configuration>
</plugin>
如果你想要 BigDecimal 你需要使用版本 1.8.2 并添加enableDecimalLogicalType
参数与true
您的 pom 文件的值:
<plugin>
<groupId>org.apache.avro</groupId>
<artifactId>avro-maven-plugin</artifactId>
<executions>
<execution>
<id>generate-avro-sources</id>
<phase>generate-sources</phase>
<goals>
<goal>schema</goal>
</goals>
<configuration>
<sourceDirectory>${basedir}/src/main/avro/</sourceDirectory>
<outputDirectory>${basedir}/generated-sources/main/java/</outputDirectory>
<enableDecimalLogicalType>true</enableDecimalLogicalType>
</configuration>
</execution>
</executions>
有关更多信息,请检查此问题:https://issues.apache.org/jira/browse/AVRO-1847 https://issues.apache.org/jira/browse/AVRO-1847
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)