Search in sources :

Example 6 with Field

use of com.thinkbiganalytics.discovery.schema.Field in project kylo by Teradata.

the class SparkFileSchemaParserServiceTest method testDecimalParsing.

/**
 * Test to ensure the column types that have precision,scale get parsed correctly to the field.precisionScale property
 */
@org.junit.Test
public void testDecimalParsing() {
    try {
        Schema decimalSchema = parseQueryResult(decimalColumns(), SparkFileSchemaParserService.SparkFileType.PARQUET, TableSchemaType.HIVE);
        assertNotNull(decimalSchema);
        Field decimalField = decimalSchema.getFields().stream().filter(field -> field.getName().equalsIgnoreCase("decimalColumn")).findFirst().orElse(null);
        assertNotNull(decimalField);
        assertEquals("decimal", decimalField.getDerivedDataType());
        assertEquals("17,12", decimalField.getPrecisionScale());
        assertEquals("decimal(17,12)", decimalField.getDataTypeWithPrecisionAndScale());
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Also used : Field(com.thinkbiganalytics.discovery.schema.Field) Schema(com.thinkbiganalytics.discovery.schema.Schema)

Example 7 with Field

use of com.thinkbiganalytics.discovery.schema.Field in project kylo by Teradata.

the class TableSetup method updateFieldStringData.

@JsonIgnore
public void updateFieldStringData() {
    StringBuffer fieldsString = new StringBuffer();
    StringBuffer nullableFieldsString = new StringBuffer();
    StringBuffer primaryKeyFieldsString = new StringBuffer();
    if (tableSchema != null && tableSchema.getFields() != null) {
        for (Field field : tableSchema.getFields()) {
            setStringBuffer(fieldsString, field.getName(), "\n");
            if (field.isNullable()) {
                setStringBuffer(nullableFieldsString, field.getName(), ",");
            }
            if (field.isPrimaryKey()) {
                setStringBuffer(primaryKeyFieldsString, field.getName(), ",");
            }
        }
    }
    setFieldsString(fieldsString.toString());
    setNullableFields(nullableFieldsString.toString());
    setPrimaryKeyFields(primaryKeyFieldsString.toString());
}
Also used : DefaultField(com.thinkbiganalytics.discovery.model.DefaultField) MetadataField(com.thinkbiganalytics.metadata.MetadataField) Field(com.thinkbiganalytics.discovery.schema.Field) JsonIgnore(com.fasterxml.jackson.annotation.JsonIgnore)

Example 8 with Field

use of com.thinkbiganalytics.discovery.schema.Field in project kylo by Teradata.

the class ParserHelper method deriveDataTypes.

/**
 * Derive data types
 *
 * @param type   the target database platform
 * @param fields the fields
 */
public static void deriveDataTypes(TableSchemaType type, List<? extends Field> fields) {
    for (Field field : fields) {
        if (StringUtils.isEmpty(field.getDerivedDataType())) {
            JDBCType jdbcType = JDBCType.VARCHAR;
            try {
                if (!StringUtils.isEmpty(field.getNativeDataType())) {
                    jdbcType = JDBCType.valueOf(field.getNativeDataType());
                } else {
                    jdbcType = deriveJDBCDataType(field.getSampleValues());
                }
            } catch (IllegalArgumentException e) {
                log.warn("Unable to convert data type [?] will be converted to VARCHAR", field.getNativeDataType());
            }
            switch(type) {
                case HIVE:
                    String hiveType = sqlTypeToHiveType(jdbcType);
                    field.setDerivedDataType(hiveType);
                    field.setDataTypeDescriptor(hiveTypeToDescriptor(hiveType));
                    break;
                case RDBMS:
                    field.setDerivedDataType(jdbcType.getName());
            }
        }
    }
}
Also used : Field(com.thinkbiganalytics.discovery.schema.Field) JDBCType(java.sql.JDBCType)

Example 9 with Field

use of com.thinkbiganalytics.discovery.schema.Field in project kylo by Teradata.

the class SparkFileSchemaParserService method toHiveSchema.

private DefaultHiveSchema toHiveSchema(TransformQueryResult result, SparkFileType fileType) {
    DefaultHiveSchema schema = new DefaultHiveSchema();
    schema.setHiveFormat("STORED AS " + fileType);
    schema.setStructured(true);
    ArrayList<Field> fields = new ArrayList<>();
    List<? extends QueryResultColumn> columns = result.getColumns();
    for (int i = 0; i < columns.size(); ++i) {
        QueryResultColumn column = columns.get(i);
        DefaultField field = new DefaultField();
        field.setName(column.getDisplayName());
        field.setNativeDataType(column.getDataType());
        field.setDerivedDataType(column.getDataType());
        field.setDataTypeDescriptor(ParserHelper.hiveTypeToDescriptor(column.getDataType()));
        // strip the precisionScale and assign to the field property
        setPrecisionAndScale(field);
        // Add sample values
        List<List<Object>> values = result.getRows();
        for (List<Object> colMap : values) {
            Object oVal = colMap.get(i);
            if (oVal != null) {
                field.getSampleValues().add(oVal.toString());
            }
        }
        fields.add(field);
    }
    schema.setFields(fields);
    return schema;
}
Also used : DefaultField(com.thinkbiganalytics.discovery.model.DefaultField) Field(com.thinkbiganalytics.discovery.schema.Field) DefaultHiveSchema(com.thinkbiganalytics.discovery.model.DefaultHiveSchema) ArrayList(java.util.ArrayList) DefaultField(com.thinkbiganalytics.discovery.model.DefaultField) ArrayList(java.util.ArrayList) List(java.util.List) QueryResultColumn(com.thinkbiganalytics.discovery.schema.QueryResultColumn)

Example 10 with Field

use of com.thinkbiganalytics.discovery.schema.Field in project kylo by Teradata.

the class TableSetup method getFieldStructure.

@JsonIgnore
public String getFieldStructure(String type, TableSchema schema) {
    StringBuffer sb = new StringBuffer();
    if (schema != null && schema.getFields() != null) {
        for (Field field : schema.getFields()) {
            if (StringUtils.isNotBlank(sb.toString())) {
                sb.append("\n");
            }
            String otherName = "";
            if (type.equalsIgnoreCase("FEED")) {
                otherName = getSourceTargetFieldMap().getOrDefault(field.getName(), "");
            } else {
                otherName = getTargetSourceFieldMap().getOrDefault(field.getName(), "");
            }
            sb.append(field.asFieldStructure(otherName));
        }
    }
    return sb.toString();
}
Also used : DefaultField(com.thinkbiganalytics.discovery.model.DefaultField) MetadataField(com.thinkbiganalytics.metadata.MetadataField) Field(com.thinkbiganalytics.discovery.schema.Field) JsonIgnore(com.fasterxml.jackson.annotation.JsonIgnore)

Aggregations

Field (com.thinkbiganalytics.discovery.schema.Field)11 DefaultField (com.thinkbiganalytics.discovery.model.DefaultField)6 ArrayList (java.util.ArrayList)3 JsonIgnore (com.fasterxml.jackson.annotation.JsonIgnore)2 DefaultHiveSchema (com.thinkbiganalytics.discovery.model.DefaultHiveSchema)2 FeedMetadata (com.thinkbiganalytics.feedmgr.rest.model.FeedMetadata)2 PartitionField (com.thinkbiganalytics.feedmgr.rest.model.schema.PartitionField)2 TableSetup (com.thinkbiganalytics.feedmgr.rest.model.schema.TableSetup)2 MetadataField (com.thinkbiganalytics.metadata.MetadataField)2 List (java.util.List)2 DefaultFileSchema (com.thinkbiganalytics.discovery.model.DefaultFileSchema)1 DefaultTableSchema (com.thinkbiganalytics.discovery.model.DefaultTableSchema)1 DefaultTag (com.thinkbiganalytics.discovery.model.DefaultTag)1 QueryResultColumn (com.thinkbiganalytics.discovery.schema.QueryResultColumn)1 Schema (com.thinkbiganalytics.discovery.schema.Schema)1 TableSchema (com.thinkbiganalytics.discovery.schema.TableSchema)1 Tag (com.thinkbiganalytics.discovery.schema.Tag)1 FeedSchedule (com.thinkbiganalytics.feedmgr.rest.model.FeedSchedule)1 FeedProcessingOptions (com.thinkbiganalytics.feedmgr.rest.model.schema.FeedProcessingOptions)1 TableOptions (com.thinkbiganalytics.feedmgr.rest.model.schema.TableOptions)1