From 14c2a77db36ef50af2411d8035713e61888773e8 Mon Sep 17 00:00:00 2001 From: Malini Mahalakshmi Venkatachari Date: Wed, 18 May 2022 09:55:43 -0700 Subject: [PATCH 1/2] Retain the type of field while copying the default values. --- .../java/org/apache/iceberg/avro/BuildAvroProjection.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/org/apache/iceberg/avro/BuildAvroProjection.java b/core/src/main/java/org/apache/iceberg/avro/BuildAvroProjection.java index 4ad709d9c3..4900e7d433 100644 --- a/core/src/main/java/org/apache/iceberg/avro/BuildAvroProjection.java +++ b/core/src/main/java/org/apache/iceberg/avro/BuildAvroProjection.java @@ -92,13 +92,10 @@ public Schema record(Schema record, List names, Iterable s if (avroField != null) { // if the expectedField has a defaultValue, but the avroField does not, we need to - // create a newField to copy over the non-null default value + // create a newField to copy over the non-null default value. if (expectedField.hasDefaultValue() && !AvroSchemaUtil.hasNonNullDefaultValue(avroField)) { - Schema newFiledSchema = (expectedField.isOptional()) ? - AvroSchemaUtil.toOption(AvroSchemaUtil.convert(expectedField.type()), true) : - AvroSchemaUtil.convert(expectedField.type()); Schema.Field newField = - new Schema.Field(avroField.name(), newFiledSchema, avroField.doc(), expectedField.getDefaultValue()); + new Schema.Field(avroField.name(), avroField.schema(), avroField.doc(), expectedField.getDefaultValue()); newField.addProp(AvroSchemaUtil.FIELD_ID_PROP, expectedField.fieldId()); updatedFields.add(newField); hasChange = true; From bea95047b1193f3a6dcdfb35be23bb2bba25697f Mon Sep 17 00:00:00 2001 From: Malini Mahalakshmi Venkatachari Date: Mon, 23 May 2022 10:20:08 -0700 Subject: [PATCH 2/2] Addressed review comments --- .../java/org/apache/iceberg/avro/BuildAvroProjection.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/apache/iceberg/avro/BuildAvroProjection.java b/core/src/main/java/org/apache/iceberg/avro/BuildAvroProjection.java index 4900e7d433..bafb21af93 100644 --- a/core/src/main/java/org/apache/iceberg/avro/BuildAvroProjection.java +++ b/core/src/main/java/org/apache/iceberg/avro/BuildAvroProjection.java @@ -94,8 +94,11 @@ public Schema record(Schema record, List names, Iterable s // if the expectedField has a defaultValue, but the avroField does not, we need to // create a newField to copy over the non-null default value. if (expectedField.hasDefaultValue() && !AvroSchemaUtil.hasNonNullDefaultValue(avroField)) { + Schema newFiledSchema = (expectedField.isOptional()) ? + AvroSchemaUtil.toOption(avroField.schema(), true) : + avroField.schema(); Schema.Field newField = - new Schema.Field(avroField.name(), avroField.schema(), avroField.doc(), expectedField.getDefaultValue()); + new Schema.Field(avroField.name(), newFiledSchema, avroField.doc(), expectedField.getDefaultValue()); newField.addProp(AvroSchemaUtil.FIELD_ID_PROP, expectedField.fieldId()); updatedFields.add(newField); hasChange = true;