Class DataTypeUtils


  • @Internal
    public final class DataTypeUtils
    extends Object
    Utilities for handling DataTypes.
    • Method Detail

      • removeTimeAttribute

        public static DataType removeTimeAttribute​(DataType dataType)
        Removes time attributes from the DataType. As everywhere else in the code base, this method does not support nested time attributes for now.
      • createProctimeDataType

        public static DataType createProctimeDataType()
        Returns a PROCTIME data type.
      • fromResolvedSchemaPreservingTimeAttributes

        public static DataType fromResolvedSchemaPreservingTimeAttributes​(ResolvedSchema resolvedSchema)
        ResolvedSchema.toPhysicalRowDataType() erases time attributes. This method keeps them during conversion for very specific use cases mostly in Table API.
      • appendRowFields

        public static DataType appendRowFields​(DataType dataType,
                                               List<DataTypes.Field> fields)
        Appends the given list of fields to an existing row data type.
      • expandCompositeTypeToSchema

        public static ResolvedSchema expandCompositeTypeToSchema​(DataType dataType)
        Expands a composite DataType to a corresponding ResolvedSchema. Useful for flattening a column or mapping a physical to logical type of a table source

        Throws an exception for a non composite type. You can use LogicalTypeChecks.isCompositeType(LogicalType) to check that.

        It does not expand an atomic type on purpose, because that operation depends on the context. E.g. in case of a FLATTEN function such operation is not allowed, whereas when mapping a physical type to logical the field name should be derived from the logical schema.

        Parameters:
        dataType - Data type to expand. Must be a composite type.
        Returns:
        A corresponding table schema.
      • getField

        public static Optional<DataType> getField​(DataType compositeType,
                                                  int index)
        Retrieves a nested field from a composite type at given position.

        Throws an exception for a non composite type. You can use LogicalTypeChecks.isCompositeType(LogicalType) to check that.

        Parameters:
        compositeType - Data type to expand. Must be a composite type.
        index - Index of the field to retrieve.
        Returns:
        The field at the given position.
      • getField

        public static Optional<DataType> getField​(DataType compositeType,
                                                  String name)
        Retrieves a nested field from a composite type with given name.

        Throws an exception for a non composite type. You can use LogicalTypeChecks.isCompositeType(LogicalType) to check that.

        Parameters:
        compositeType - Data type to expand. Must be a composite type.
        name - Name of the field to retrieve.
        Returns:
        The field with the given name.
      • flattenToDataTypes

        public static List<DataType> flattenToDataTypes​(DataType dataType)
        Returns the data types of the flat representation in the first level of the given data type.
      • flattenToNames

        public static List<String> flattenToNames​(DataType dataType)
        Returns the names of the flat representation of the given data type. In case of StructuredType, the list also includes the super type fields.
      • toInternalDataType

        public static DataType toInternalDataType​(DataType dataType)
        Creates a DataType from the given DataType with internal data structures.
      • isInternal

        public static boolean isInternal​(DataType dataType)
        Checks whether a given data type is an internal data structure.
      • isInternal

        public static boolean isInternal​(DataType dataType,
                                         boolean autobox)
        Checks whether a given data type is an internal data structure.
      • validateInputDataType

        public static void validateInputDataType​(DataType dataType)
        The DataType class can only partially verify the conversion class. This method can perform the final check when we know if the data type should be used for input.
      • validateOutputDataType

        public static void validateOutputDataType​(DataType dataType)
        The DataType class can only partially verify the conversion class. This method can perform the final check when we know if the data type should be used for output.
      • transform

        public static DataType transform​(@Nullable
                                         DataTypeFactory factory,
                                         DataType typeToTransform,
                                         TypeTransformation... transformations)
        Transforms the given data type to a different data type using the given transformations.

        The transformations will be called in the given order. In case of constructed or composite types, a transformation will be applied transitively to children first.

        Both the DataType.getLogicalType() and DataType.getConversionClass() can be transformed.

        Parameters:
        factory - DataTypeFactory if available
        typeToTransform - data type to be transformed.
        transformations - the transformations to transform data type to another type.
        Returns:
        the new data type
      • alignStructuredTypes

        public static DataType alignStructuredTypes​(DataTypeFactory factory,
                                                    DataType dataType)
        Aligns the DataType and its nested conversion classes with the given StructuredType.getImplementationClass().

        By default, a data type is created from a LogicalType and uses default conversion classes. But for conversion to the implementation class, the data type must reflect the correct expected classes (e.g. List<Integer> instead of Integer[]) for all attributes.