Package com.linkedin.data.schema

Examples of com.linkedin.data.schema.DataSchema


      Schema avroSchema = Schema.parse(avroSchemaText);
      System.out.println(avroSchema);
      RecordDataSchema schema = (RecordDataSchema) SchemaTranslator.avroToDataSchema(avroSchema);
      RecordDataSchema filteredSchema = (RecordDataSchema) Filters.removeByPredicate(schema, predicate, new SchemaParser());

      DataSchema expectedSchema = TestUtil.dataSchemaFromString(schemaText);
      System.out.println(filteredSchema);
      assertEquals(filteredSchema, expectedSchema);

      while (i < row.length)
      {
View Full Code Here


      if (avroOverride != null)
      {
        return avroOverride.getCustomDataTranslator().dataToAvroGeneric(this, value, dataSchema, avroSchema);
      }

      DataSchema dereferencedDataSchema = dataSchema.getDereferencedDataSchema();
      DataSchema.Type type = dereferencedDataSchema.getType();
      Object result;
      switch (type)
      {
        case NULL:
          if (value != Data.NULL)
          {
            appendMessage("value must be null for null schema");
            result = BAD_RESULT;
            break;
          }
          result = null;
          break;
        case BOOLEAN:
          result = ((Boolean) value).booleanValue();
          break;
        case INT:
          result = ((Number) value).intValue();
          break;
        case LONG:
          result = ((Number) value).longValue();
          break;
        case FLOAT:
          result = ((Number) value).floatValue();
          break;
        case DOUBLE:
          result = ((Number) value).doubleValue();
          break;
        case STRING:
          result = new Utf8((String) value);
          break;
        case BYTES:
          result = ByteBuffer.wrap(translateBytes(value));
          break;
        case ENUM:
          String enumValue = value.toString();
          EnumDataSchema enumDataSchema = (EnumDataSchema) dereferencedDataSchema;
          if (enumDataSchema.getSymbols().contains(enumValue) == false)
          {
            appendMessage("enum value %1$s not one of %2$s", enumValue, enumDataSchema.getSymbols());
            result = BAD_RESULT;
            break;
          }
          result = _avroAdapter.createEnumSymbol(avroSchema, enumValue);
          break;
        case FIXED:
          byte[] bytes = translateBytes(value);
          FixedDataSchema fixedDataSchema = (FixedDataSchema) dereferencedDataSchema;
          if (fixedDataSchema.getSize() != bytes.length)
          {
            appendMessage("ByteString size %1$d != FixedDataSchema size %2$d",
                          bytes.length,
                          fixedDataSchema.getSize());
            result = null;
            break;
          }
          GenericData.Fixed fixed = new GenericData.Fixed(avroSchema);
          fixed.bytes(bytes);
          result = fixed;
          break;
        case MAP:
          DataMap map = (DataMap) value;
          DataSchema valueDataSchema = ((MapDataSchema) dereferencedDataSchema).getValues();
          Schema valueAvroSchema = avroSchema.getValueType();
          Map<String, Object> avroMap = new HashMap<String, Object>(map.size());
          for (Map.Entry<String, Object> entry : map.entrySet())
          {
            String key = entry.getKey();
            _path.addLast(key);
            Object entryAvroValue = translate(entry.getValue(), valueDataSchema, valueAvroSchema);
            _path.removeLast();
            avroMap.put(key, entryAvroValue);
          }
          result = avroMap;
          break;
        case ARRAY:
          DataList list = (DataList) value;
          DataSchema elementDataSchema = ((ArrayDataSchema) dereferencedDataSchema).getItems();
          Schema elementAvroSchema = avroSchema.getElementType();
          GenericData.Array<Object> avroList = new GenericData.Array<Object>(list.size(), avroSchema);
          for (int i = 0; i < list.size(); i++)
          {
            _path.addLast(i);
            Object entryAvroValue = translate(list.get(i), elementDataSchema, elementAvroSchema);
            _path.removeLast();
            avroList.add(entryAvroValue);
          }
          result = avroList;
          break;
        case RECORD:
          map = (DataMap) value;
          RecordDataSchema recordDataSchema = (RecordDataSchema) dereferencedDataSchema;
          GenericData.Record avroRecord = new GenericData.Record(avroSchema);
          for (RecordDataSchema.Field field : recordDataSchema.getFields())
          {
            String fieldName = field.getName();
            DataSchema fieldDataSchema = field.getType();
            Schema.Field avroField = avroSchema.getField(fieldName);
            if (avroField == null)
            {
              // field present in input but there is no field for it in Avro schema.
              // TODO: Whether and how to indicate this condition to clients.
              continue;
            }
            _path.addLast(fieldName);
            Schema fieldAvroSchema = avroField.schema();
            Object fieldValue = map.get(fieldName);
            boolean isOptional = field.getOptional();
            if (isOptional)
            {
              if (fieldDataSchema.getDereferencedType() != DataSchema.Type.UNION)
              {
                if (fieldValue == null)
                {
                  fieldValue = Data.NULL;
                  fieldDataSchema = DataSchemaConstants.NULL_DATA_SCHEMA;
                }
                Map.Entry<String, Schema> fieldAvroEntry = findUnionMember(fieldDataSchema, fieldAvroSchema);
                if (fieldAvroEntry == null)
                {
                  _path.removeLast();
                  continue;
                }
                fieldAvroSchema = fieldAvroEntry.getValue();
              }
              else
              {
                // already a union
                if (fieldValue == null)
                {
                  // field is not present
                  fieldValue = Data.NULL;
                  fieldDataSchema = DataSchemaConstants.NULL_DATA_SCHEMA;
                }
              }
            }
            else
            {
              if (fieldValue == null)
              {
                appendMessage("required field is absent");
                _path.removeLast();
                continue;
              }
            }
            Object fieldAvroValue = translate(fieldValue, fieldDataSchema, fieldAvroSchema);
            avroRecord.put(fieldName, fieldAvroValue);
            _path.removeLast();
          }
          result = avroRecord;
          break;
        case UNION:
          UnionDataSchema unionDataSchema = (UnionDataSchema) dereferencedDataSchema;
          String key;
          Object memberValue;
          if (value == Data.NULL)
          {
            key = DataSchemaConstants.NULL_TYPE;
            memberValue = Data.NULL;
          }
          else
          {
            map = (DataMap) value;
            Map.Entry<String, Object> entry = map.entrySet().iterator().next();
            key = entry.getKey();
            memberValue = entry.getValue();
          }
          DataSchema memberDataSchema = unionDataSchema.getType(key);
          Map.Entry<String, Schema> memberAvroEntry = findUnionMember(memberDataSchema, avroSchema);
          if (memberAvroEntry == null)
          {
            result = BAD_RESULT;
            break;
View Full Code Here

      for (EmbedSchemaMode embedSchemaMode : EmbedSchemaMode.values())
      {
        for (OptionalDefaultMode optionalDefaultMode : optionalDefaultModes)
        {
          DataSchema schema = TestUtil.dataSchemaFromString(schemaText);
          String preTranslateSchemaText = schema.toString();
          Exception exc = null;
          String avroTextFromSchema = null;
          try
          {
            avroTextFromSchema = SchemaTranslator.dataToAvroSchemaJson(
              schema,
              new DataToAvroSchemaTranslationOptions(optionalDefaultMode, JsonBuilder.Pretty.SPACES, embedSchemaMode)
            );
            if (debug)
            {
              System.out.println("EmbeddedSchema: " + embedSchemaMode +
                                 ", OptionalDefaultMode: " + optionalDefaultMode +
                                 ", Avro Schema: " + avroTextFromSchema);
            }
          }
          catch (Exception e)
          {
            exc = e;
            if (debug) { e.printStackTrace(); }
          }
          if (expected instanceof String)
          {
            assertNull(exc);

            String expectedAvroText = (String) expected;
            if (embedSchemaMode == EmbedSchemaMode.ROOT_ONLY && hasEmbeddedSchema(schema))
            {
              // when embeddedSchema is enabled
              // for map, array, enums. and records, we embed the original Pegasus schema
              DataMap expectedAvroDataMap = TestUtil.dataMapFromString(expectedAvroText);
              DataMap resultAvroDataMap = TestUtil.dataMapFromString(avroTextFromSchema);
              Object dataProperty = resultAvroDataMap.remove(SchemaTranslator.DATA_PROPERTY);
              assertEquals(resultAvroDataMap, expectedAvroDataMap);

              // look for embedded schema
              assertNotNull(dataProperty);
              assertTrue(dataProperty instanceof DataMap);
              Object schemaProperty = ((DataMap) dataProperty).get(SchemaTranslator.SCHEMA_PROPERTY);
              assertNotNull(schemaProperty);
              assertTrue(schemaProperty instanceof DataMap);

              // make sure embedded schema is same as the original schema
              SchemaParser schemaParser = TestUtil.schemaParserFromObjects(Arrays.asList(schemaProperty));
              DataSchema embeddedSchema = schemaParser.topLevelDataSchemas().get(0);
              assertEquals(embeddedSchema, schema.getDereferencedDataSchema());

              // look for optional default mode
              Object optionalDefaultModeProperty = ((DataMap) dataProperty).get(SchemaTranslator.OPTIONAL_DEFAULT_MODE_PROPERTY);
              assertNotNull(optionalDefaultMode);
              assertEquals(optionalDefaultModeProperty, optionalDefaultMode.toString());
            }
            else
            {
              // embeddedSchema is not enabled or
              // for unions and primitives, we never embed the pegasus schema
              if (embedSchemaMode == EmbedSchemaMode.NONE && hasEmbeddedSchema(schema))
              {
                // make sure no embedded schema when
                DataMap resultAvroDataMap = TestUtil.dataMapFromString(avroTextFromSchema);
                assertFalse(resultAvroDataMap.containsKey(SchemaTranslator.DATA_PROPERTY));
              }
              assertEquals(avroTextFromSchema, expectedAvroText);
            }

            String postTranslateSchemaText = schema.toString();
            assertEquals(preTranslateSchemaText, postTranslateSchemaText);

            // make sure Avro accepts it
            Schema avroSchema = Schema.parse(avroTextFromSchema);
            if (debug) System.out.println("AvroSchema: " + avroSchema);

            SchemaParser parser = new SchemaParser();
            ValidationOptions options = new ValidationOptions();
            options.setAvroUnionMode(true);
            parser.setValidationOptions(options);
            parser.parse(avroTextFromSchema);
            assertFalse(parser.hasError(), parser.errorMessage());

            if (optionalDefaultMode == DataToAvroSchemaTranslationOptions.DEFAULT_OPTIONAL_DEFAULT_MODE)
            {
              // use other dataToAvroSchemaJson
              String avroSchema2Json = SchemaTranslator.dataToAvroSchemaJson(
                TestUtil.dataSchemaFromString(schemaText)
              );
              @SuppressWarnings("deprecation")
              String avroSchema2JsonCompact = SchemaTranslator.dataToAvroSchemaJson(
                TestUtil.dataSchemaFromString(schemaText),
                JsonBuilder.Pretty.COMPACT
              );
              assertEquals(avroSchema2Json, avroSchema2JsonCompact);
              Schema avroSchema2 = Schema.parse(avroSchema2Json);
              assertEquals(avroSchema2, avroSchema);

              // use dataToAvroSchema
              Schema avroSchema3 = SchemaTranslator.dataToAvroSchema(TestUtil.dataSchemaFromString(schemaText));
              assertEquals(avroSchema3, avroSchema2);
            }

            if (modeInputs.length >= 4)
            {
              // check if the translated default value is good by using it.
              // writer schema and Avro JSON value should not include fields with default values.
              String writerSchemaText = (String) modeInputs[2];
              String avroValueJson = (String) modeInputs[3];
              Schema writerSchema = Schema.parse(writerSchemaText);
              GenericRecord genericRecord = genericRecordFromString(avroValueJson, writerSchema, avroSchema);

              if (modeInputs.length >= 5)
              {
                String genericRecordJson = (String) modeInputs[4];
                String genericRecordAsString = genericRecord.toString();
                DataMap expectedGenericRecord = TestUtil.dataMapFromString(genericRecordJson);
                DataMap resultGenericRecord = TestUtil.dataMapFromString(genericRecordAsString);
                assertEquals(resultGenericRecord, expectedGenericRecord);
              }
            }

            if (embedSchemaMode == EmbedSchemaMode.ROOT_ONLY && hasEmbeddedSchema(schema))
            {
              // if embedded schema is enabled, translate Avro back to Pegasus schema.
              // the output Pegasus schema should be exactly same the input schema
              // taking into account typeref.
              AvroToDataSchemaTranslationOptions avroToDataSchemaMode = new AvroToDataSchemaTranslationOptions(AvroToDataSchemaTranslationMode.VERIFY_EMBEDDED_SCHEMA);
              DataSchema embeddedSchema = SchemaTranslator.avroToDataSchema(avroTextFromSchema, avroToDataSchemaMode);
              assertEquals(embeddedSchema, schema.getDereferencedDataSchema());
            }
          }
          else
          {
View Full Code Here

      {
        String avroText = pair[0];
        String schemaText = pair[1];
        if (debug) System.out.println(avroText);

        DataSchema schema = SchemaTranslator.avroToDataSchema(avroText, option);
        String schemaTextFromAvro = SchemaToJsonEncoder.schemaToJson(schema, JsonBuilder.Pretty.SPACES);
        assertEquals(schemaTextFromAvro, schemaText);

        Schema avroSchema = Schema.parse(avroText);
        String preTranslateAvroSchema = avroSchema.toString();
View Full Code Here

      Object expected = row[2];

      AvroToDataSchemaTranslationOptions options = new AvroToDataSchemaTranslationOptions(translationMode);
      try
      {
        DataSchema translatedDataSchema = SchemaTranslator.avroToDataSchema(avroSchemaText, options);
        assertTrue(expected instanceof String);
        assertEquals(TestUtil.dataMapFromString(translatedDataSchema.toString()), TestUtil.dataMapFromString((String) expected));
      }
      catch (Exception e)
      {
        assertTrue(expected instanceof Class);
        assertTrue(((Class<?>) expected).isAssignableFrom(e.getClass()));
View Full Code Here

        result = value;
      }
      else
      {
        // member type is always the 1st member of the union.
        DataSchema memberSchema = unionDataSchema.getTypes().get(0);
        result = unionDefaultValue(memberSchema, value);
        path.add(avroUnionMemberKey(memberSchema));
        translate(path, value, memberSchema);
        path.remove(path.size() - 1);
      }
View Full Code Here

    }

    @Override
    protected Object translateField(List<Object> path, Object fieldValue, RecordDataSchema.Field field)
    {
      DataSchema fieldDataSchema = field.getType();
      boolean isOptional = field.getOptional();
      Object result;
      if (isOptional && fieldValue == Data.NULL)
      {
        // for optional fields,
View Full Code Here

        return;
      }
      RecordDataSchema recordSchema = (RecordDataSchema) schema;
      for (RecordDataSchema.Field field : recordSchema.getFields())
      {
        DataSchema fieldSchema = field.getType();
        // check if union
        boolean isUnion = fieldSchema.getDereferencedType() == DataSchema.Type.UNION;
        field.setOptional(false);
        if (isUnion) {
          UnionDataSchema unionSchema = (UnionDataSchema) fieldSchema;
          int nullIndex= unionSchema.index(NULL_DATA_SCHEMA.getUnionMemberKey());
          // check if union with null
          if (nullIndex != -1)
          {
            List<DataSchema> types = unionSchema.getTypes();
            if (types.size() == 2)
            {
              DataSchema newFieldSchema = unionSchema.getTypes().get((nullIndex + 1) % 2);
              field.setType(newFieldSchema);
            }
            else
            {
              ArrayList<DataSchema> newTypes = new ArrayList<DataSchema>(types);
View Full Code Here

    final SchemaParser parser = new SchemaParser(resolver);

    final Class<? extends RecordTemplate> testClass = ClassNameFooRecord.class;
    final String nonExistSchemaName = "Non-Existing Schema";

    final DataSchema existSchema = parser.lookupName(testClass.getName());
    assertNotNull(existSchema);
    assertTrue(existSchema instanceof RecordDataSchema);
    assertEquals(((RecordDataSchema) existSchema).getFullName(), testClass.getCanonicalName());
    assertFalse(resolver.isBadLocation(new ClassNameDataSchemaLocation(testClass.getName())));

    final DataSchema nonExistSchema = parser.lookupName(nonExistSchemaName);
    assertNull(nonExistSchema);
    assertTrue(parser.errorMessage().contains(nonExistSchemaName));
    assertTrue(resolver.isBadLocation(new ClassNameDataSchemaLocation(nonExistSchemaName)));
  }
View Full Code Here

    for (String[] entry : lookups)
    {
      String name = entry[0];
      String expectFound = entry[1];
      String expected = entry[2];
      DataSchema schema = parser.lookupName(name);
      if (debug) { out.println("----" + name + "-----"); }
      String errorMessage = parser.errorMessage();
      if (debug && errorMessage.isEmpty() == false) { out.println(errorMessage); }
      if (expectFound == ERROR)
      {
        assertTrue(parser.hasError());
        assertTrue(expected == null || errorMessage.contains(expected));
      }
      else if (expectFound == FOUND)
      {
        assertTrue(schema != null);
        String schemaText = schema.toString();
        if (debug) { out.println(schemaText); }
        assertFalse(parser.hasError());
        assertTrue(schema instanceof NamedDataSchema);
        NamedDataSchema namedSchema = (NamedDataSchema) schema;
        assertEquals(namedSchema.getFullName(), name);
View Full Code Here

TOP

Related Classes of com.linkedin.data.schema.DataSchema

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.