java.math.BigDecimal 到 Avro .avdl 文件
java.math.BigDecimal to Avro .avdl file
我在为 java.math.BigDecimal 类型编写 Avro 模式时遇到问题,我尝试了以下方法:
- 基于 Avro 官方 doc,我知道我需要自己定义逻辑类型来支持 BigDecimal,但是 link 仅在 avsc 中给出了示例,我试图在avdl.
- 基于Avro doc and this example,我在下面写了avdl:
`
@namespace("test")
protocol My_Protocol_v1 {
record BigDecimal {
@java-class("java.math.BigDecimal") string value;
}
`
但它不起作用:
这个 IDL 模式编译得很好,可以生成一个名为 BigDecimal 的 Java class,但我不能真正将生成的 BigDecimal 用作 java.math.BigDecimal,这是怎么回事?或者我应该怎么做?
非常感谢
好的,所以我通过电子邮件发送了 Apache Avro 开发电子邮件列表,并收到了 Doug Cutting 的回复(非常感谢 Doug)。
I believe this has already been implemented but not yet released.
It was implemented in: https://issues.apache.org/jira/browse/AVRO-1847
This is slated to be included in the 1.8.2 release, which should soon be out.
只是为了阐明它在较新版本中的工作原理:
我们刚刚开始使用 1.8.2
的 rc4,您可以使用以下语法创建 BigDecimal 字段:
record Thing {
decimal(10,2) foo;
}
Thing
class 将有一个 BigDecimal
属性 foo
,精度为 10,小数位数为 2。
即使编译器版本已更改为 1.8.2 版本,decimal(10,2) 也不会在 avsc 模式中生成 decimal 数据类型..
我在为 java.math.BigDecimal 类型编写 Avro 模式时遇到问题,我尝试了以下方法:
- 基于 Avro 官方 doc,我知道我需要自己定义逻辑类型来支持 BigDecimal,但是 link 仅在 avsc 中给出了示例,我试图在avdl.
- 基于Avro doc and this example,我在下面写了avdl:
`
@namespace("test")
protocol My_Protocol_v1 {
record BigDecimal {
@java-class("java.math.BigDecimal") string value;
}
`
但它不起作用: 这个 IDL 模式编译得很好,可以生成一个名为 BigDecimal 的 Java class,但我不能真正将生成的 BigDecimal 用作 java.math.BigDecimal,这是怎么回事?或者我应该怎么做?
非常感谢
好的,所以我通过电子邮件发送了 Apache Avro 开发电子邮件列表,并收到了 Doug Cutting 的回复(非常感谢 Doug)。
I believe this has already been implemented but not yet released.
It was implemented in: https://issues.apache.org/jira/browse/AVRO-1847
This is slated to be included in the 1.8.2 release, which should soon be out.
只是为了阐明它在较新版本中的工作原理:
我们刚刚开始使用 1.8.2
的 rc4,您可以使用以下语法创建 BigDecimal 字段:
record Thing {
decimal(10,2) foo;
}
Thing
class 将有一个 BigDecimal
属性 foo
,精度为 10,小数位数为 2。
即使编译器版本已更改为 1.8.2 版本,decimal(10,2) 也不会在 avsc 模式中生成 decimal 数据类型..