我在为 java.math.BigDecimal 类型编写 Avro 模式时遇到问题,我尝试了以下方法:
- 基于 Avro 官方文档,我知道我需要自己定义逻辑类型以支持 BigDecimal,但该链接仅在 avsc 中提供了示例,我正在尝试在 avdl 中弄清楚。
- 基于 Avro 文档和此示例,我在 avdl 下面写道:
'
@namespace("test")
protocol My_Protocol_v1 {
record BigDecimal {
@java-class("java.math.BigDecimal") string value;
}
'
但它不起作用:这个 IDL 模式编译得很好,可以生成一个名为 BigDecimal 的 Java 类,但我不能真正使用生成的 BigDecimal 作为 java.math.BigDecimal,这是怎么回事?或者我应该怎么做?
多谢
好的,所以我通过电子邮件发送了Apache Avro开发电子邮件列表,并得到了Doug Cuting的回复(非常感谢Doug)。
我相信这已经实施但尚未发布。
它在以下情况下实施: https://issues.apache.org/jira/browse/AVRO-1847
这计划包含在 1.8.2 版本中,该版本应该很快就会发布。
只是为了阐明它在较新版本中的工作方式:
我们刚刚开始使用 rc4 of 1.8.2
,您可以使用以下语法创建 BigDecimal 字段:
record Thing {
decimal(10,2) foo;
}
Thing
类将具有精度为 10、小数位数为 2 的BigDecimal
属性foo
。
decimal(10,2) 不会在 avsc 架构中生成十进制数据类型,即使编译器版本已更改为 1.8.2 版本。