Author: thejas Date: Thu Jan 29 17:24:10 2015 New Revision: 1655757 URL: http://svn.apache.org/r1655757 Log: HIVE-9489 : add javadoc for UDFType annotation (Thejas Nair, reviewed by Lefty Leverenz, Ashutosh Chauhan)
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFType.java Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFType.java URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFType.java?rev=1655757&r1=1655756&r2=1655757&view=diff ============================================================================== --- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFType.java (original) +++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFType.java Thu Jan 29 17:24:10 2015 @@ -23,16 +23,51 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import org.apache.hadoop.hive.common.classification.InterfaceAudience.Public; +import org.apache.hadoop.hive.common.classification.InterfaceStability.Evolving; + /** - * UDFType. + * UDFType annotations are used to describe properties of a UDF. This gives + * important information to the optimizer. + * If the UDF is not deterministic, or if it is stateful, it is necessary to + * annotate it as such for correctness. * */ +@Public +@Evolving @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Inherited public @interface UDFType { + /** + * Certain optimizations should not be applied if UDF is not deterministic. + * Deterministic UDF returns same result each time it is invoked with a + * particular input. This determinism just needs to hold within the context of + * a query. + * + * @return true if the UDF is deterministic + */ boolean deterministic() default true; + + /** + * If a UDF stores state based on the sequence of records it has processed, it + * is stateful. A stateful UDF cannot be used in certain expressions such as + * case statement and certain optimizations such as AND/OR short circuiting + * don't apply for such UDFs, as they need to be invoked for each record. + * row_sequence is an example of stateful UDF. A stateful UDF is considered to + * be non-deterministic, irrespective of what deterministic() returns. + * + * @return true + */ boolean stateful() default false; + + /** + * A UDF is considered distinctLike if the UDF can be evaluated on just the + * distinct values of a column. Examples include min and max UDFs. This + * information is used by metadata-only optimizer. + * + * @return true if UDF is distinctLike + */ boolean distinctLike() default false; /**