|
|
-
issue with default values in avro
Serge Blazhievsky 2012-02-08, 23:35
Hi all,
I am trying to utilize default setting for values in avro schema, however, it does not seems to be set. My code is below. List<Schema.Field> fields2 = new ArrayList<Schema.Field>();
org.codehaus.jackson.JsonNode defaultValue2 =TextNode.valueOf("default2");
fields2.add(new Schema.Field("SSN", Schema.create(Type.STRING), "Second schema", defaultValue2));
fields2.add(new Schema.Field("LastName", Schema.create(Type.STRING), "Second schema", defaultValue2));
Schema schema2 = Schema.createRecord("blah", "blah", "merced.ssn", false);
schema2.setFields(fields2); System.out.println(schema2.toString(true));
GenericRecord r=new GenericData.Record(schema2); r.put("SSN", "12345");
System.out.println(r.get("LastName")); System.out.println(r.toString()); >>>>>>>>>>>>>>>>>>>>>>>>>>
{ "type" : "record", "name" : "blah", "namespace" : "merced.ssn", "doc" : "blah", "fields" : [ { "name" : "SSN", "type" : "string", "doc" : "Second schema", "default" : "default2" }, { "name" : "LastName", "type" : "string", "doc" : "Second schema", "default" : "default2" } ] } null {"SSN": "12345", "LastName": null} I expect LastName to be set to default2 Thank you for your help.
Serge
-
Re: issue with default values in avro
Doug Cutting 2012-02-08, 23:47
Serge,
Default field values are primarily used when reading records that don't have those fields, typically an older version of the record.
GenericData.Record's constructor does not use default values to populate fields. All fields in an instance created by 'new GenericData.Record(<schema>)' are initially null, not set to the default value of the schema.
However the GenericRecordBuilder API does use default values to populate instances. The value of 'new GenericRecordBuilder(<schema>).set("SSN", "XXX").build()' should contain what you want.
Doug
On 02/08/2012 03:35 PM, Serge Blazhievsky wrote: > Hi all, > > > > I am trying to utilize default setting for values in avro schema, > however, it does not seems to be set. > > > My code is below. > > > List<Schema.Field> fields2 = new ArrayList<Schema.Field>(); > > org.codehaus.jackson.JsonNode defaultValue2 > =TextNode.valueOf("default2"); > > fields2.add(new Schema.Field("SSN", Schema.create(Type.STRING), > "Second schema", defaultValue2)); > > fields2.add(new Schema.Field("LastName", > Schema.create(Type.STRING), "Second schema", defaultValue2)); > > Schema schema2 = Schema.createRecord("blah", "blah", > "merced.ssn", false); > > schema2.setFields(fields2); > > > System.out.println(schema2.toString(true)); > > GenericRecord r=new GenericData.Record(schema2); > > > r.put("SSN", "12345"); > > System.out.println(r.get("LastName")); > > > System.out.println(r.toString()); > > >>>>>>>>>>>>>>>>>>>>>>>>>>> > > { > "type" : "record", > "name" : "blah", > "namespace" : "merced.ssn", > "doc" : "blah", > "fields" : [ { > "name" : "SSN", > "type" : "string", > "doc" : "Second schema", > "default" : "default2" > }, { > "name" : "LastName", > "type" : "string", > "doc" : "Second schema", > "default" : "default2" > } ] > } > null > {"SSN": "12345", "LastName": null} > > > I expect LastName to be set to default2 > > > Thank you for your help. > > Serge >
-
Re: issue with default values in avro
easyvoip@... 2012-02-09, 00:25
Worked like a charm!
Thanks Doug!
Sent from my iPhone
On Feb 8, 2012, at 3:47 PM, Doug Cutting <[EMAIL PROTECTED]> wrote:
> Serge, > > Default field values are primarily used when reading records that don't > have those fields, typically an older version of the record. > > GenericData.Record's constructor does not use default values to populate > fields. All fields in an instance created by 'new > GenericData.Record(<schema>)' are initially null, not set to the default > value of the schema. > > However the GenericRecordBuilder API does use default values to populate > instances. The value of 'new GenericRecordBuilder(<schema>).set("SSN", > "XXX").build()' should contain what you want. > > Doug > > On 02/08/2012 03:35 PM, Serge Blazhievsky wrote: >> Hi all, >> >> >> >> I am trying to utilize default setting for values in avro schema, >> however, it does not seems to be set. >> >> >> My code is below. >> >> >> List<Schema.Field> fields2 = new ArrayList<Schema.Field>(); >> >> org.codehaus.jackson.JsonNode defaultValue2 >> =TextNode.valueOf("default2"); >> >> fields2.add(new Schema.Field("SSN", Schema.create(Type.STRING), >> "Second schema", defaultValue2)); >> >> fields2.add(new Schema.Field("LastName", >> Schema.create(Type.STRING), "Second schema", defaultValue2)); >> >> Schema schema2 = Schema.createRecord("blah", "blah", >> "merced.ssn", false); >> >> schema2.setFields(fields2); >> >> >> System.out.println(schema2.toString(true)); >> >> GenericRecord r=new GenericData.Record(schema2); >> >> >> r.put("SSN", "12345"); >> >> System.out.println(r.get("LastName")); >> >> >> System.out.println(r.toString()); >> >> >>>>>>>>>>>>>>>>>>>>>>>>>>>> >> >> { >> "type" : "record", >> "name" : "blah", >> "namespace" : "merced.ssn", >> "doc" : "blah", >> "fields" : [ { >> "name" : "SSN", >> "type" : "string", >> "doc" : "Second schema", >> "default" : "default2" >> }, { >> "name" : "LastName", >> "type" : "string", >> "doc" : "Second schema", >> "default" : "default2" >> } ] >> } >> null >> {"SSN": "12345", "LastName": null} >> >> >> I expect LastName to be set to default2 >> >> >> Thank you for your help. >> >> Serge >>
|
|