3

我在为 java.math.BigDecimal 类型编写 Avro 模式时遇到问题,我尝试了以下方法:

  1. 基于 Avro 官方文档,我知道我需要自己定义逻辑类型以支持 BigDecimal,但该链接仅在 avsc 中给出示例,我试图在 avdl 中弄清楚。
  2. 基于Avro doc和这个例子,我在avdl下面写了:

`

@namespace("test")
protocol My_Protocol_v1 {

  record BigDecimal {
        @java-class("java.math.BigDecimal") string value;
  }

`

但它不起作用:这个 IDL 模式编译得很好,可以生成一个名为 BigDecimal 的 Java 类,但我不能真正将生成的 BigDecimal 用作 java.math.BigDecimal,这是怎么回事?或者我应该怎么做?

非常感谢

4

3 回答 3

2

好的,所以我向 Apache Avro 开发人员电子邮件列表发送了电子邮件,并收到了 Doug Cutting 的回复(非常感谢 Doug)。

我相信这已经实施但尚未发布。

它在以下位置实现:https ://issues.apache.org/jira/browse/AVRO-1847

这将包含在 1.8.2 版本中,该版本很快就会发布。

于 2017-02-17T01:04:38.653 回答
0

即使编译器版本已更改为 1.8.2 版本,十进制(10,2)也不会在 avsc 模式中生成十进制数据类型。

于 2018-11-27T05:48:40.050 回答
0

只是为了阐明它在较新版本中的工作原理:
我们刚刚开始使用 rc4 of 1.8.2,您可以使用以下语法创建 BigDecimal 字段:

record Thing {
    decimal(10,2) foo;
}

该类Thing将具有精度为 10 且比例为 2的BigDecimal属性。foo

于 2017-05-12T15:30:41.097 回答