[ https://issues.apache.org/jira/browse/AVRO-1827?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jakub Kahovec updated AVRO-1827: -------------------------------- Status: Open (was: Patch Available) > Handling correctly optional fields when converting Protobuf to Avro > ------------------------------------------------------------------- > > Key: AVRO-1827 > URL: https://issues.apache.org/jira/browse/AVRO-1827 > Project: Avro > Issue Type: Improvement > Affects Versions: 1.8.0, 1.7.7 > Reporter: Jakub Kahovec > > Hello, > as of the current implementation of converting protobuf files into avro > format, protobuf optional fields are being given default values in the avro > schema if not specified explicitly. > So for instance when the protobuf field is defined as > {quote} > optional int64 fieldInt64 = 1; > {quote} > in the avro schema it appears as > {quote} > "name" : "fieldInt64", > "type" : "long", > "default" : 0 > {quote} > The problem with this implementation is that we are losing information about > whether the field was present or not in the original protobuf, as when we ask > for this field's value in avro we will be given the default value. > What I'm proposing instead is that if the field in the protobuf is defined as > optional and has no default value then the generated avro schema type will us > a union comprising the matching type and null type with default value null. > It is going to look like this: > {quote} > "name" : "fieldIn64", > "type" : [ "null", "long" ], > "default" : null > {quote} > I'm aware that is a breaking change but I think that is the proper way how to > handle optional fields. > I've also created a patch which fixes the conversion > Jakub -- This message was sent by Atlassian JIRA (v6.3.4#6332)