@Override protected void customizeSchemaField(Field avroField, Record fieldType) { if (fieldType.getSchema().getName().equals(ARRAY_FIELD_TYPE)) { GenericData.EnumSymbol overrideStrategy = (GenericData.EnumSymbol) fieldType.get(OVERRIDE_STRATEGY); if (overrideStrategy != null && !overrideStrategy.toString().equalsIgnoreCase(OverrideStrategy.REPLACE.name())) { avroField.addProp(OVERRIDE_STRATEGY, overrideStrategy.toString().toLowerCase()); } } }
@Test public void testRecordGetFieldDoesntExist() throws Exception { List<Field> fields = new ArrayList<>(); Schema schema = Schema.createRecord(fields); GenericData.Record record = new GenericData.Record(schema); assertNull(record.get("does not exist")); }
@Test public void asciiBytesWrittenWithUnionSchemaIsConvertedToStringSchema() throws Exception { Schema writer = UNION_STRING_BYTES_RECORD; ByteBuffer buf = ByteBuffer.wrap("42".getBytes("UTF-8")); Record record = defaultRecordWithSchema(writer, FIELD_A, buf); byte[] encoded = encodeGenericBlob(record); CharSequence read = (CharSequence) decodeGenericBlob(STRING_RECORD, writer, encoded).get(FIELD_A); assertEquals("42", read.toString()); }
@Test public void utf8StringWrittenWithUnionSchemaIsConvertedToBytesSchema() throws Exception { String goeran = String.format("G%sran", LATIN_SMALL_LETTER_O_WITH_DIARESIS); Schema writer = UNION_STRING_BYTES_RECORD; Record record = defaultRecordWithSchema(writer, FIELD_A, goeran); byte[] encoded = encodeGenericBlob(record); ByteBuffer actual = (ByteBuffer) decodeGenericBlob(BYTES_RECORD, writer, encoded).get(FIELD_A); assertArrayEquals(goeran.getBytes("UTF-8"), actual.array()); }
/** * Gets the value of a field. * @param pos the position of the field to get. * @return the value of the field with the given position, or null if not set. */ protected Object get(int pos) { return record.get(pos); }
/** * Gets the value of a field. * @param pos the position of the field to get. * @return the value of the field with the given position, or null if not set. */ protected Object get(int pos) { return record.get(pos); }
@Test public void utf8BytesWrittenWithUnionSchemaIsConvertedToStringSchema() throws Exception { String goeran = String.format("G%sran", LATIN_SMALL_LETTER_O_WITH_DIARESIS); Schema writer = UNION_STRING_BYTES_RECORD; Record record = defaultRecordWithSchema(writer, FIELD_A, goeran); byte[] encoded = encodeGenericBlob(record); CharSequence read = (CharSequence) decodeGenericBlob(STRING_RECORD, writer, encoded).get(FIELD_A); assertEquals(goeran, read.toString()); }
@Test public void asciiStringWrittenWithUnionSchemaIsConvertedToBytesSchema() throws Exception { Schema writer = UNION_STRING_BYTES_RECORD; Record record = defaultRecordWithSchema(writer, FIELD_A, "42"); byte[] encoded = encodeGenericBlob(record); ByteBuffer actual = (ByteBuffer) decodeGenericBlob(BYTES_RECORD, writer, encoded).get(FIELD_A); assertArrayEquals("42".getBytes("UTF-8"), actual.array()); }
@Test public void intWrittenWithUnionSchemaIsConvertedToDoubleSchema() throws Exception { Schema writer = UNION_INT_RECORD; Record record = defaultRecordWithSchema(writer, FIELD_A, 42); byte[] encoded = encodeGenericBlob(record); Record decoded = decodeGenericBlob(UNION_DOUBLE_RECORD, writer, encoded); assertEquals(42.0, decoded.get(FIELD_A)); }
@Test public void readerWithDefaultValueIsApplied() throws Exception { Schema reader = SchemaBuilder.record(RECORD_A) // .fields() // .name("newFieldWithDefault").type().intType().intDefault(314) // .name(FIELD_A).type().intType().noDefault() // .endRecord(); Record record = defaultRecordWithSchema(INT_RECORD, FIELD_A, 42); byte[] encoded = encodeGenericBlob(record); Record decoded = decodeGenericBlob(reader, INT_RECORD, encoded); assertEquals(42, decoded.get(FIELD_A)); assertEquals(314, decoded.get("newFieldWithDefault")); }
@Test public void enumRecordCanBeReadWithExtendedEnumSchema() throws Exception { Schema writer = ENUM_AB_RECORD; Record record = defaultRecordWithSchema(writer, FIELD_A, new EnumSymbol(writer, "A")); byte[] encoded = encodeGenericBlob(record); Record decoded = decodeGenericBlob(ENUM_ABC_RECORD, writer, encoded); assertEquals("A", decoded.get(FIELD_A).toString()); }
@Test public void longWrittenWithUnionSchemaIsConvertedToFloatDoubleUnionSchema() throws Exception { Schema writer = UNION_LONG_RECORD; Record record = defaultRecordWithSchema(writer, FIELD_A, 42L); byte[] encoded = encodeGenericBlob(record); Record decoded = decodeGenericBlob(UNION_FLOAT_DOUBLE_RECORD, writer, encoded); assertEquals(42.0F, decoded.get(FIELD_A)); }
@Test public void longWrittenWithUnionSchemaIsConvertedToLongFloatUnionSchema() throws Exception { Schema writer = UNION_LONG_RECORD; Record record = defaultRecordWithSchema(writer, FIELD_A, 42L); byte[] encoded = encodeGenericBlob(record); Record decoded = decodeGenericBlob(UNION_LONG_FLOAT_RECORD, writer, encoded); assertEquals(42L, decoded.get(FIELD_A)); }
@Test public void intWrittenWithUnionSchemaIsReadableByFloatUnionSchema() throws Exception { Schema writer = UNION_INT_RECORD; Record record = defaultRecordWithSchema(writer, FIELD_A, 42); byte[] encoded = encodeGenericBlob(record); Record decoded = decodeGenericBlob(UNION_FLOAT_RECORD, writer, encoded); assertEquals(42.0f, decoded.get(FIELD_A)); }
@Test public void longWrittenWithUnionSchemaIsConvertedToUnionLongFloatSchema() throws Exception { Schema writer = UNION_LONG_RECORD; Record record = defaultRecordWithSchema(writer, FIELD_A, 42L); byte[] encoded = encodeGenericBlob(record); Record decoded = decodeGenericBlob(UNION_LONG_FLOAT_RECORD, writer, encoded); assertEquals(42L, decoded.get(FIELD_A)); }
@Test public void enumRecordWithExtendedSchemaCanBeReadWithOriginalEnumSchemaIfOnlyOldValues() throws Exception { Schema writer = ENUM_ABC_RECORD; Record record = defaultRecordWithSchema(writer, FIELD_A, new EnumSymbol(writer, "A")); byte[] encoded = encodeGenericBlob(record); Record decoded = decodeGenericBlob(ENUM_AB_RECORD, writer, encoded); assertEquals("A", decoded.get(FIELD_A).toString()); }
@Test public void longWrittenWithUnionSchemaIsReadableByFloatSchema() throws Exception { Schema writer = UNION_LONG_RECORD; Record record = defaultRecordWithSchema(writer, FIELD_A, 42L); byte[] encoded = encodeGenericBlob(record); Record decoded = decodeGenericBlob(FLOAT_RECORD, writer, encoded); assertEquals(42.0f, decoded.get(FIELD_A)); }
@Test public void longWrittenWithUnionSchemaIsConvertedToDoubleSchema() throws Exception { Schema writer = UNION_LONG_RECORD; Record record = defaultRecordWithSchema(writer, FIELD_A, 42L); byte[] encoded = encodeGenericBlob(record); Record decoded = decodeGenericBlob(UNION_DOUBLE_RECORD, writer, encoded); assertEquals(42.0, decoded.get(FIELD_A)); }
@Test public void doubleWrittenWithUnionSchemaIsConvertedToDoubleSchema() throws Exception { Schema writer = UNION_INT_LONG_FLOAT_DOUBLE_RECORD; Record record = defaultRecordWithSchema(writer, FIELD_A, 42.0); byte[] encoded = encodeGenericBlob(record); Record decoded = decodeGenericBlob(DOUBLE_RECORD, writer, encoded); assertEquals(42.0, decoded.get(FIELD_A)); }
@Override protected void map(AvroKey<GenericData.Record> key, NullWritable value, Context context) throws IOException, InterruptedException { total += (Long)key.datum().get("value"); } }