You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by br...@apache.org on 2013/07/31 20:41:10 UTC
svn commit: r1508984 - in /hive/trunk/ql/src:
java/org/apache/hadoop/hive/ql/exec/ java/org/apache/hadoop/hive/ql/parse/
java/org/apache/hadoop/hive/ql/udf/generic/
test/org/apache/hadoop/hive/ql/exec/
Author: brock
Date: Wed Jul 31 18:41:09 2013
New Revision: 1508984
URL: http://svn.apache.org/r1508984
Log:
HIVE-4954: PTFTranslator hardcodes ranking functions (Edward Capriolo via Brock Noland)
Modified:
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/WindowFunctionDescription.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/PTFTranslator.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFCumeDist.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFDenseRank.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFPercentRank.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFRank.java
hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/exec/TestFunctionRegistry.java
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java?rev=1508984&r1=1508983&r2=1508984&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java Wed Jul 31 18:41:09 2013
@@ -1480,4 +1480,23 @@ public final class FunctionRegistry {
mFunctions.put(name.toLowerCase(), tInfo);
}
+ /**
+ * Use this to check if function is ranking function
+ *
+ * @param name
+ * name of a function
+ * @return true if function is a UDAF, has WindowFunctionDescription annotation and the annotations
+ * confirms a ranking function, false otherwise
+ */
+ public static boolean isRankingFunction(String name){
+ FunctionInfo info = mFunctions.get(name.toLowerCase());
+ GenericUDAFResolver res = info.getGenericUDAFResolver();
+ if (res != null){
+ WindowFunctionDescription desc = res.getClass().getAnnotation(WindowFunctionDescription.class);
+ if (desc != null){
+ return desc.rankingFunction();
+ }
+ }
+ return false;
+ }
}
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/WindowFunctionDescription.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/WindowFunctionDescription.java?rev=1508984&r1=1508983&r2=1508984&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/WindowFunctionDescription.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/WindowFunctionDescription.java Wed Jul 31 18:41:09 2013
@@ -50,5 +50,11 @@ public @interface WindowFunctionDescript
* for all the rows.
*/
boolean pivotResult() default false;
+
+ /**
+ * Used in translations process to validate arguments
+ * @return true if ranking function
+ */
+ boolean rankingFunction() default false;
}
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/PTFTranslator.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/PTFTranslator.java?rev=1508984&r1=1508983&r2=1508984&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/PTFTranslator.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/PTFTranslator.java Wed Jul 31 18:41:09 2013
@@ -425,8 +425,7 @@ public class PTFTranslator {
}
}
- if (RANKING_FUNCS.contains(spec.getName()))
- {
+ if (FunctionRegistry.isRankingFunction(spec.getName())){
setupRankingArgs(wdwTFnDef, def, spec);
}
@@ -785,19 +784,6 @@ public class PTFTranslator {
return combinedOrdExprs;
}
-
- /*
- * Ranking Functions helpers
- */
-
- protected static final ArrayList<String> RANKING_FUNCS = new ArrayList<String>();
- static {
- RANKING_FUNCS.add("rank");
- RANKING_FUNCS.add("dense_rank");
- RANKING_FUNCS.add("percent_rank");
- RANKING_FUNCS.add("cume_dist");
- };
-
private void setupRankingArgs(WindowTableFunctionDef wdwTFnDef,
WindowFunctionDef wFnDef,
WindowFunctionSpec wSpec)
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFCumeDist.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFCumeDist.java?rev=1508984&r1=1508983&r2=1508984&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFCumeDist.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFCumeDist.java Wed Jul 31 18:41:09 2013
@@ -43,7 +43,8 @@ import org.apache.hadoop.io.IntWritable;
" and including x in the specified order/ N"
),
supportsWindow = false,
- pivotResult = true
+ pivotResult = true,
+ rankingFunction = true
)
public class GenericUDAFCumeDist extends GenericUDAFRank
{
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFDenseRank.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFDenseRank.java?rev=1508984&r1=1508983&r2=1508984&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFDenseRank.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFDenseRank.java Wed Jul 31 18:41:09 2013
@@ -34,7 +34,8 @@ import org.apache.hadoop.hive.ql.exec.Wi
"that the next person came in third."
),
supportsWindow = false,
- pivotResult = true
+ pivotResult = true,
+ rankingFunction = true
)
public class GenericUDAFDenseRank extends GenericUDAFRank
{
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFPercentRank.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFPercentRank.java?rev=1508984&r1=1508983&r2=1508984&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFPercentRank.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFPercentRank.java Wed Jul 31 18:41:09 2013
@@ -40,7 +40,8 @@ import org.apache.hadoop.io.IntWritable;
"(rank of row in its partition - 1) / (number of rows in the partition - 1)"
),
supportsWindow = false,
- pivotResult = true
+ pivotResult = true,
+ rankingFunction = true
)
public class GenericUDAFPercentRank extends GenericUDAFRank
{
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFRank.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFRank.java?rev=1508984&r1=1508983&r2=1508984&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFRank.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFRank.java Wed Jul 31 18:41:09 2013
@@ -44,7 +44,8 @@ import org.apache.hadoop.io.IntWritable;
value = "_FUNC_(x)"
),
supportsWindow = false,
- pivotResult = true
+ pivotResult = true,
+ rankingFunction = true
)
public class GenericUDAFRank extends AbstractGenericUDAFResolver
{
Modified: hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/exec/TestFunctionRegistry.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/exec/TestFunctionRegistry.java?rev=1508984&r1=1508983&r2=1508984&view=diff
==============================================================================
--- hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/exec/TestFunctionRegistry.java (original)
+++ hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/exec/TestFunctionRegistry.java Wed Jul 31 18:41:09 2013
@@ -22,6 +22,7 @@ import java.lang.reflect.Method;
import java.util.LinkedList;
import java.util.List;
+import junit.framework.Assert;
import junit.framework.TestCase;
import org.apache.hadoop.hive.serde2.io.DateWritable;
@@ -146,4 +147,12 @@ public class TestFunctionRegistry extend
@Override
protected void tearDown() {
}
+
+ public void testIsRankingFunction() {
+ Assert.assertTrue(FunctionRegistry.isRankingFunction("rank"));
+ Assert.assertTrue(FunctionRegistry.isRankingFunction("dense_rank"));
+ Assert.assertTrue(FunctionRegistry.isRankingFunction("percent_rank"));
+ Assert.assertTrue(FunctionRegistry.isRankingFunction("cume_dist"));
+ Assert.assertFalse(FunctionRegistry.isRankingFunction("min"));
+ }
}