Interface Transform<S,​T>

  • Type Parameters:
    S - Java class of source values
    T - Java class of transformed values
    All Superinterfaces:
    java.io.Serializable
    All Known Implementing Classes:
    UnknownTransform

    public interface Transform<S,​T>
    extends java.io.Serializable
    A transform function used for partitioning.

    Implementations of this interface can be used to transform values, check or types, and project predicates to predicates on partition values.

    • Method Detail

      • apply

        T apply​(S value)
        Transforms a value to its corresponding partition value.
        Parameters:
        value - a source value
        Returns:
        a transformed partition value
      • canTransform

        boolean canTransform​(Type type)
        Checks whether this function can be applied to the given Type.
        Parameters:
        type - a type
        Returns:
        true if this transform can be applied to the type, false otherwise
      • getResultType

        Type getResultType​(Type sourceType)
        Returns the Type produced by this transform given a source type.
        Parameters:
        sourceType - a type
        Returns:
        the result type created by the apply method for the given type
      • preservesOrder

        default boolean preservesOrder()
        Whether the transform preserves the order of values (is monotonic).

        A transform preserves order for values when for any given a and b, if a < b then apply(a) <= apply(b).

        Returns:
        true if the transform preserves the order of values
      • satisfiesOrderOf

        default boolean satisfiesOrderOf​(Transform<?,​?> other)
        Whether ordering by this transform's result satisfies the ordering of another transform's result.

        For example, sorting by day(ts) will produce an ordering that is also by month(ts) or year(ts). However, sorting by day(ts) will not satisfy the order of hour(ts) or identity(ts).

        Returns:
        true if ordering by this transform is equivalent to ordering by the other transform
      • project

        UnboundPredicate<T> project​(java.lang.String name,
                                    BoundPredicate<S> predicate)
        Transforms a predicate to an inclusive predicate on the partition values produced by apply(Object).

        This inclusive transform guarantees that if pred(v) is true, then projected(apply(v)) is true.

        Parameters:
        name - the field name for partition values
        predicate - a predicate for source values
        Returns:
        an inclusive predicate on partition values
      • projectStrict

        UnboundPredicate<T> projectStrict​(java.lang.String name,
                                          BoundPredicate<S> predicate)
        Transforms a predicate to a strict predicate on the partition values produced by apply(Object).

        This strict transform guarantees that if strict(apply(v)) is true, then pred(v) is also true.

        Parameters:
        name - the field name for partition values
        predicate - a predicate for source values
        Returns:
        an inclusive predicate on partition values
      • isIdentity

        default boolean isIdentity()
        Return whether this transform is the identity transform.
        Returns:
        true if this is an identity transform, false otherwise
      • toHumanString

        default java.lang.String toHumanString​(T value)
        Returns a human-readable String representation of a transformed value.

        null values will return "null"

        Parameters:
        value - a transformed value
        Returns:
        a human-readable String representation of the value
      • dedupName

        default java.lang.String dedupName()
        Return the unique transform name to check if similar transforms for the same source field are added multiple times in partition spec builder.
        Returns:
        a name used for dedup