2017-01-31 1 views
2

Je vais avoir du mal à écrire un schéma Avro pour le type java.math.BigDecimal, j'ai essayé les éléments suivants:java.math.BigDecimal à Avro .avdl fichier

  1. Basé sur Avro officielle doc, je sais que je besoin de définir moi-même des types logiques pour supporter BigDecimal, mais ce lien ne donne qu'un exemple dans avsc, j'essaie de le comprendre dans avdl.
  2. Basé sur Avro doc et ce example, j'ai écrit ci-dessous avdl:

`

@namespace("test") 
protocol My_Protocol_v1 { 

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

`

Mais cela ne fonctionne pas: Ce schéma IDL compile bien et peut générer une Classe Java appelée BigDecimal, mais je ne peux pas vraiment utiliser le BigDecimal généré comme java.math.BigDecimal, qu'est-ce qui ne va pas? ou Comment dois-je le faire?

Merci beaucoup

Répondre

1

OK, donc j'ai envoyé la liste dev email Apache Avro et a obtenu une réponse de Doug Cutting (Merci beaucoup 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. 
0

Juste pour faire la lumière sur la façon dont cela fonctionne dans la nouvelle version:
Nous venons commencé à utiliser RC4 de 1.8.2 et vous pouvez créer des champs BigDecimal avec la syntaxe suivante:

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

La classe Thing aura un BigDecimal propriété foo avec une précision de 10 et échelle de 2.