This is an automated email from the ASF dual-hosted git repository. anton pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/beam.git
The following commit(s) were added to refs/heads/master by this push: new 172b563 [BEAM-7808] Add method to convert avro field to beam field new 866b8e7 Merge pull request #9142 from bmv126/Avro_field_to_beam_field 172b563 is described below commit 172b563fdd36019d3284139417808681314ac364 Author: B M VISHWAS <b_m.vish...@nokia.com> AuthorDate: Wed Jul 24 08:53:21 2019 -0500 [BEAM-7808] Add method to convert avro field to beam field --- .../apache/beam/sdk/schemas/utils/AvroUtils.java | 24 ++++++++++++---- .../beam/sdk/schemas/utils/AvroUtilsTest.java | 32 ++++++++++++++++++++++ 2 files changed, 50 insertions(+), 6 deletions(-) diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AvroUtils.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AvroUtils.java index 81b834b..0933b31 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AvroUtils.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AvroUtils.java @@ -163,6 +163,22 @@ public class AvroUtils { } } + /** Get Beam Field from avro Field. */ + public static Schema.Field toBeamField(org.apache.avro.Schema.Field field) { + TypeWithNullability nullableType = new TypeWithNullability(field.schema()); + FieldType beamFieldType = toFieldType(nullableType); + return Field.of(field.name(), beamFieldType); + } + + /** Get Avro Field from Beam Field. */ + public static org.apache.avro.Schema.Field toAvroField(Schema.Field field) { + org.apache.avro.Schema fieldSchema = getFieldSchema(field.getType()); + org.apache.avro.Schema.Field avroField = + new org.apache.avro.Schema.Field( + field.getName(), fieldSchema, field.getDescription(), (Object) null); + return avroField; + } + private AvroUtils() {} /** @@ -174,8 +190,7 @@ public class AvroUtils { Schema.Builder builder = Schema.builder(); for (org.apache.avro.Schema.Field field : schema.getFields()) { - TypeWithNullability nullableType = new TypeWithNullability(field.schema()); - Field beamField = Field.of(field.name(), toFieldType(nullableType)); + Field beamField = toBeamField(field); if (field.doc() != null) { beamField = beamField.withDescription(field.doc()); } @@ -189,10 +204,7 @@ public class AvroUtils { public static org.apache.avro.Schema toAvroSchema(Schema beamSchema) { List<org.apache.avro.Schema.Field> fields = Lists.newArrayList(); for (Schema.Field field : beamSchema.getFields()) { - org.apache.avro.Schema fieldSchema = getFieldSchema(field.getType()); - org.apache.avro.Schema.Field recordField = - new org.apache.avro.Schema.Field( - field.getName(), fieldSchema, field.getDescription(), (Object) null); + org.apache.avro.Schema.Field recordField = toAvroField(field); fields.add(recordField); } org.apache.avro.Schema avroSchema = org.apache.avro.Schema.createRecord(fields); diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/utils/AvroUtilsTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/utils/AvroUtilsTest.java index 94ab0d7..e43985c 100644 --- a/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/utils/AvroUtilsTest.java +++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/utils/AvroUtilsTest.java @@ -140,6 +140,38 @@ public class AvroUtilsTest { typeWithNullability.type); } + @Test + public void testNullableArrayFieldToBeamArrayField() { + org.apache.avro.Schema.Field avroField = + new org.apache.avro.Schema.Field( + "arrayField", + ReflectData.makeNullable( + org.apache.avro.Schema.createArray((org.apache.avro.Schema.create(Type.INT)))), + "", + null); + + Field expectedBeamField = Field.nullable("arrayField", FieldType.array(FieldType.INT32)); + + Field beamField = AvroUtils.toBeamField(avroField); + assertEquals(expectedBeamField, beamField); + } + + @Test + public void testNullableBeamArrayFieldToAvroField() { + Field beamField = Field.nullable("arrayField", FieldType.array(FieldType.INT32)); + + org.apache.avro.Schema.Field expectedAvroField = + new org.apache.avro.Schema.Field( + "arrayField", + ReflectData.makeNullable( + org.apache.avro.Schema.createArray((org.apache.avro.Schema.create(Type.INT)))), + "", + null); + + org.apache.avro.Schema.Field avroField = AvroUtils.toAvroField(beamField); + assertEquals(expectedAvroField, avroField); + } + private org.apache.avro.Schema getAvroSubSchema() { List<org.apache.avro.Schema.Field> fields = Lists.newArrayList(); fields.add(