@Test public void testWriteUUIDList() throws IOException { Schema uuidListSchema = SchemaBuilder.record(RecordWithUUIDList.class.getName()) .fields() .name("uuids").type().array().items().stringType().noDefault() .endRecord(); uuidListSchema.getField("uuids").schema().addProp( SpecificData.CLASS_PROP, List.class.getName()); LogicalTypes.uuid().addToSchema( uuidListSchema.getField("uuids").schema().getElementType()); Schema stringArraySchema = SchemaBuilder.record("RecordWithUUIDArray") .fields() .name("uuids").type().array().items().stringType().noDefault() .endRecord(); stringArraySchema.getField("uuids").schema() .addProp(SpecificData.CLASS_PROP, List.class.getName()); UUID u1 = UUID.randomUUID(); UUID u2 = UUID.randomUUID(); GenericRecord expected = new GenericData.Record(stringArraySchema); expected.put("uuids", Arrays.asList(u1.toString(), u2.toString())); RecordWithUUIDList r = new RecordWithUUIDList(); r.uuids = Arrays.asList(u1, u2); File test = write(REFLECT, uuidListSchema, r); Assert.assertEquals("Should read UUIDs as Strings", expected, read(REFLECT.createDatumReader(stringArraySchema), test).get(0)); }
.items() .stringType() .noDefault() .endRecord()));
fieldAssembler = fieldAssembler.name("id").type().unionOf().array().items().stringType().and().stringType().and().nullType().endUnion().noDefault(); fieldAssembler = fieldAssembler.name("rdf_type").type().unionOf().array().items().stringType().and().stringType().and().nullType().endUnion().noDefault();
.name("a_string").type().stringType().noDefault() .name("b_int").type().intType().noDefault() .name("c_string_array").type().array().items().stringType().noDefault() .name("d_int_array").type().array().items().intType().noDefault() .name("e_float_array").type().array().items().floatType().noDefault() .endRecord();
if(targetSchema == null) fieldAssembler = fieldAssembler.name(predicateShortHand).type().unionOf().array().items().stringType().and().stringType().and().nullType().endUnion().noDefault(); fieldAssembler = fieldAssembler.name(predicateShortHand).type().unionOf().array().items(targetSchema).and().type(targetSchema).and().nullType().endUnion().noDefault();
@Test public void testAllAvroTypes() { Schema r = SchemaBuilder.record("r").fields() .requiredBoolean("boolF") .requiredInt("intF") .requiredLong("longF") .requiredFloat("floatF") .requiredDouble("doubleF") .requiredString("stringF") .requiredBytes("bytesF") .name("fixedF1").type().fixed("F1").size(1).noDefault() .name("enumF").type().enumeration("E1").symbols("S").noDefault() .name("mapF").type().map().values().stringType().noDefault() .name("arrayF").type().array().items().stringType().noDefault() .name("recordF").type().record("inner").fields() .name("f").type().intType().noDefault() .endRecord().noDefault() .optionalBoolean("boolO") .endRecord(); assertTrue(SchemaValidationUtil.canRead(r, r)); } }
@Test public void testSchemaInferenceMultipleTypes() throws Exception { Schema recordSchema = SchemaBuilder.record("Test").fields() .requiredString("aString") .name("anArray").type().array().items() .unionOf().nullType().and().intType().and().stringType().endUnion().noDefault() .endRecord(); String jsonSample = "{" + "\"aString\": \"triangle\"," + "\"anArray\": [ null, 1, 2, 3, \"winter\" ]" + "}"; JsonNode datum = JsonUtil.parse(jsonSample); Assert.assertEquals("Should produce expected schema", recordSchema, JsonUtil.inferSchema(datum, "Test")); GenericData.Record expected = new GenericData.Record(recordSchema); expected.put("aString", "triangle"); expected.put("anArray", Lists.newArrayList(null, 1, 2, 3, "winter")); Assert.assertEquals("Should convert to record", expected, convertGeneric(datum, recordSchema)); }
@Test public void testSchemaInferenceNullablePrimitiveArray() throws Exception { Schema recordSchema = SchemaBuilder.record("Test").fields() .requiredString("aString") .name("anArray").type().array().items() .unionOf().nullType().and().intType().endUnion().noDefault() .endRecord(); String jsonSample = "{" + "\"aString\": \"triangle\"," + "\"anArray\": [ null, 1, 2, 3, 4 ]" + "}"; JsonNode datum = JsonUtil.parse(jsonSample); Assert.assertEquals("Should produce expected schema", recordSchema, JsonUtil.inferSchema(datum, "Test")); GenericData.Record expected = new GenericData.Record(recordSchema); expected.put("aString", "triangle"); expected.put("anArray", Lists.newArrayList(null, 1, 2, 3, 4)); Assert.assertEquals("Should convert to record", expected, convertGeneric(datum, recordSchema)); }
@Test public void testSchemaInferencePrimitiveArray() throws Exception { Schema recordSchema = SchemaBuilder.record("Test").fields() .requiredString("aString") .name("anArray").type().array().items().intType().noDefault() .endRecord(); String jsonSample = "{" + "\"aString\": \"triangle\"," + "\"anArray\": [ 1, 2, 3, 4 ]" + "}"; JsonNode datum = JsonUtil.parse(jsonSample); Assert.assertEquals("Should produce expected schema", recordSchema, JsonUtil.inferSchema(datum, "Test")); GenericData.Record expected = new GenericData.Record(recordSchema); expected.put("aString", "triangle"); expected.put("anArray", Lists.newArrayList(1, 2, 3, 4)); Assert.assertEquals("Should convert to record", expected, convertGeneric(datum, recordSchema)); }
/** Build an Avro array type **/ public ArrayBuilder<UnionAccumulator<ArrayDefault<R>>> array() { return ArrayBuilder.create(completion(new ArrayDefault<R>(bldr)), names); }
/** Build an Avro array type **/ public final ArrayBuilder<ArrayDefault<R>> array() { return ArrayBuilder.create(wrap(new ArrayDefault<R>(bldr)), names); }
/** Build an Avro array type **/ public ArrayBuilder<UnionAccumulator<ArrayDefault<R>>> array() { return ArrayBuilder.create(completion(new ArrayDefault<R>(bldr)), names); }
/** Build an Avro array type **/ public final ArrayBuilder<ArrayDefault<R>> array() { return ArrayBuilder.create(wrap(new ArrayDefault<R>(bldr)), names); }
.mapDefault(mapdef) .name("arrayF").type().array().items().stringType() .arrayDefault(arrdef) .name("recordF").type().record("inner").fields() .name("f").type().intType().noDefault() .intType().endUnion().mapDefault(mapdef) .name("arrayU").type().unionOf().array().items().stringType().and() .intType().endUnion().arrayDefault(arrdef) .name("recordU").type().unionOf().record("inner2").fields() .name("f2").type().intType().noDefault()
switch (dataType) { case INT: fieldAssembler = fieldAssembler.name(fieldSpec.getName()).type().array().items().intType().noDefault(); break; case LONG: fieldAssembler = fieldAssembler.name(fieldSpec.getName()).type().array().items().longType().noDefault(); break; case FLOAT: fieldAssembler = fieldAssembler.name(fieldSpec.getName()).type().array().items().floatType().noDefault(); break; case DOUBLE: fieldAssembler = fieldAssembler.name(fieldSpec.getName()).type().array().items().doubleType().noDefault(); break; case STRING: fieldAssembler = fieldAssembler.name(fieldSpec.getName()).type().array().items().stringType().noDefault(); break; default:
@Test public void testWriteUUIDArray() throws IOException { Schema uuidArraySchema = SchemaBuilder.record(RecordWithUUIDArray.class.getName()) .fields() .name("uuids").type().array().items().stringType().noDefault() .endRecord(); LogicalTypes.uuid().addToSchema( uuidArraySchema.getField("uuids").schema().getElementType()); Schema stringArraySchema = SchemaBuilder.record("RecordWithUUIDArray") .fields() .name("uuids").type().array().items().stringType().noDefault() .endRecord(); stringArraySchema.getField("uuids").schema() .addProp(SpecificData.CLASS_PROP, List.class.getName()); UUID u1 = UUID.randomUUID(); UUID u2 = UUID.randomUUID(); GenericRecord expected = new GenericData.Record(stringArraySchema); List<String> uuids = new ArrayList<>(); uuids.add(u1.toString()); uuids.add(u2.toString()); expected.put("uuids", uuids); RecordWithUUIDArray r = new RecordWithUUIDArray(); r.uuids = new UUID[] {u1, u2}; File test = write(REFLECT, uuidArraySchema, r); Assert.assertEquals("Should read UUIDs as Strings", expected, read(ReflectData.get().createDatumReader(stringArraySchema), test).get(0)); }
@Test public void testAllTypes() throws SchemaValidationException { Schema s = SchemaBuilder.record("r").fields() .requiredBoolean("boolF") .requiredInt("intF") .requiredLong("longF") .requiredFloat("floatF") .requiredDouble("doubleF") .requiredString("stringF") .requiredBytes("bytesF") .name("fixedF1").type().fixed("F1").size(1).noDefault() .name("enumF").type().enumeration("E1").symbols("S").noDefault() .name("mapF").type().map().values().stringType().noDefault() .name("arrayF").type().array().items().stringType().noDefault() .name("recordF").type().record("inner").fields() .name("f").type().intType().noDefault() .endRecord().noDefault() .optionalBoolean("boolO") .endRecord(); testValidatorPasses(builder.mutualReadStrategy().validateLatest(), s, s); }
@Test public void testReadUUIDList() throws IOException { Schema uuidListSchema = SchemaBuilder.record(RecordWithUUIDList.class.getName()) .fields() .name("uuids").type().array().items().stringType().noDefault() .endRecord(); uuidListSchema.getField("uuids").schema().addProp( SpecificData.CLASS_PROP, List.class.getName()); LogicalTypes.uuid().addToSchema( uuidListSchema.getField("uuids").schema().getElementType()); UUID u1 = UUID.randomUUID(); UUID u2 = UUID.randomUUID(); GenericRecord r = new GenericData.Record(uuidListSchema); r.put("uuids", Arrays.asList(u1.toString(), u2.toString())); RecordWithUUIDList expected = new RecordWithUUIDList(); expected.uuids = Arrays.asList(u1, u2); File test = write(uuidListSchema, r); Assert.assertEquals("Should convert Strings to UUIDs", expected, read(REFLECT.createDatumReader(uuidListSchema), test).get(0)); }
@Test public void testReadUUIDArray() throws IOException { Schema uuidArraySchema = SchemaBuilder.record(RecordWithUUIDArray.class.getName()) .fields() .name("uuids").type().array().items().stringType().noDefault() .endRecord(); LogicalTypes.uuid().addToSchema( uuidArraySchema.getField("uuids").schema().getElementType()); UUID u1 = UUID.randomUUID(); UUID u2 = UUID.randomUUID(); GenericRecord r = new GenericData.Record(uuidArraySchema); r.put("uuids", Arrays.asList(u1.toString(), u2.toString())); RecordWithUUIDArray expected = new RecordWithUUIDArray(); expected.uuids = new UUID[] {u1, u2}; File test = write(uuidArraySchema, r); Assert.assertEquals("Should convert Strings to UUIDs", expected, read(REFLECT.createDatumReader(uuidArraySchema), test).get(0)); }