You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by dh...@apache.org on 2008/09/18 19:38:04 UTC
svn commit: r696736 [1/7] - in /hadoop/core/trunk: ./ src/contrib/hive/
src/contrib/hive/ql/ src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/
src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/
src/contrib/hive/ql/src/java/org/apache/ha...
Author: dhruba
Date: Thu Sep 18 10:37:59 2008
New Revision: 696736
URL: http://svn.apache.org/viewvc?rev=696736&view=rev
Log:
HADOOP-4084. Add explain plan capabilities to Hive Query Language.
(Ashish Thusoo via dhruba)
Added:
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/ExplainTask.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionInfo.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/ExplainSemanticAnalyzer.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/explain.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/explainWork.java
Removed:
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/UDAFRegistry.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/UDFRegistry.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/FunctionInfo.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeRegistry.java
Modified:
hadoop/core/trunk/CHANGES.txt
hadoop/core/trunk/src/contrib/hive/build-common.xml
hadoop/core/trunk/src/contrib/hive/ql/build.xml
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/CopyTask.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/ExecDriver.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/Operator.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskFactory.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/PartitionPruner.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/RowResolver.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzerFactory.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeInfo.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/DDLWork.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/aggregationDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/alterTableDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/collectDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/copyWork.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/createTableDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/descTableDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/dropTableDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/explosionDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeColumnDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeConstantDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeFieldDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeFuncDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeIndexDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeNullDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/extractDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/fileSinkDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/filterDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/forwardDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/groupByDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/joinCond.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/joinDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/loadDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/loadFileDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/loadTableDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/mapredWork.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/moveWork.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/partitionDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/reduceSinkDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/scriptDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/selectDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/showTablesDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/tableDesc.java
hadoop/core/trunk/src/contrib/hive/ql/src/test/org/apache/hadoop/hive/ql/QTestUtil.java
hadoop/core/trunk/src/contrib/hive/ql/src/test/org/apache/hadoop/hive/ql/exec/TestCompositeHiveObject.java
hadoop/core/trunk/src/contrib/hive/ql/src/test/org/apache/hadoop/hive/ql/exec/TestExecDriver.java
hadoop/core/trunk/src/contrib/hive/ql/src/test/org/apache/hadoop/hive/ql/exec/TestJEXL.java
hadoop/core/trunk/src/contrib/hive/ql/src/test/org/apache/hadoop/hive/ql/exec/TestOperators.java
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/cast1.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/groupby1.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/groupby2.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/groupby3.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/groupby4.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/groupby5.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/groupby6.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/input1.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/input10.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/input11.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/input12.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/input13.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/input14.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/input15.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/input2.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/input3.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/input4.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/input5.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/input6.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/input7.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/input8.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/input9.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/input_part1.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/input_testsequencefile.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/input_testxpath.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/inputddl1.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/inputddl2.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/inputddl3.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/join1.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/join2.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/join3.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/join4.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/join5.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/join6.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/join7.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/join8.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/sample1.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/sample2.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/sample4.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/sample5.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/sample6.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/sample7.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/subq.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/udf1.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/union.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/cast1.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/groupby1.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/groupby2.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/groupby3.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/groupby4.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/groupby5.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/groupby6.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/input1.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/input10.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/input11.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/input12.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/input13.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/input14.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/input15.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/input2.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/input3.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/input4.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/input5.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/input6.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/input7.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/input8.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/input9.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/input_part1.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/input_testsequencefile.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/input_testxpath.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/inputddl1.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/inputddl2.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/inputddl3.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/join1.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/join2.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/join3.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/join4.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/join5.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/join6.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/join7.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/join8.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/sample1.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/sample2.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/sample4.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/sample5.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/sample6.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/sample7.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/subq.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/udf1.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/union.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/cast1.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/groupby1.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/groupby2.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/groupby3.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/groupby4.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/groupby5.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/groupby6.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/input1.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/input2.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/input3.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/input4.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/input5.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/input6.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/input7.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/input8.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/input9.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/input_part1.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/input_testsequencefile.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/input_testxpath.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/join1.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/join2.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/join3.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/join4.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/join5.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/join6.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/join7.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/join8.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/sample1.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/sample2.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/sample3.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/sample4.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/sample5.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/sample6.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/sample7.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/subq.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/udf1.q.xml
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/plan/union.q.xml
Modified: hadoop/core/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/CHANGES.txt?rev=696736&r1=696735&r2=696736&view=diff
==============================================================================
--- hadoop/core/trunk/CHANGES.txt (original)
+++ hadoop/core/trunk/CHANGES.txt Thu Sep 18 10:37:59 2008
@@ -625,6 +625,9 @@
HADOOP-4200. Fix a bug in the test-patch.sh script.
(Ramya R via nigel)
+ HADOOP-4084. Add explain plan capabilities to Hive Query Language.
+ (Ashish Thusoo via dhruba)
+
Release 0.18.1 - 2008-09-17
IMPROVEMENTS
Modified: hadoop/core/trunk/src/contrib/hive/build-common.xml
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/build-common.xml?rev=696736&r1=696735&r2=696736&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/build-common.xml (original)
+++ hadoop/core/trunk/src/contrib/hive/build-common.xml Thu Sep 18 10:37:59 2008
@@ -205,7 +205,7 @@
<mkdir dir="${test.log.dir}"/>
<junit showoutput="${test.output}" printsummary="yes" haltonfailure="no"
fork="yes" maxmemory="256m" dir="${basedir}" timeout="${test.timeout}"
- errorProperty="tests.failed" failureProperty="tests.failed" filtertrace="off" >
+ errorProperty="tests.failed" failureProperty="tests.failed" filtertrace="off">
<!--
<jvmarg value="-Xdebug"/>
<jvmarg value="-Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y"/> -->
Modified: hadoop/core/trunk/src/contrib/hive/ql/build.xml
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/build.xml?rev=696736&r1=696735&r2=696736&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/build.xml (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/build.xml Thu Sep 18 10:37:59 2008
@@ -61,7 +61,8 @@
templatePath="${ql.test.template.dir}" template="TestCliDriver.vm"
queryDirectory="${ql.test.query.dir}/clientpositive"
queryFile="${qfile}"
- resultsDirectory="${ql.test.results.dir}/clientpositive" className="TestCliDriver"/>
+ resultsDirectory="${ql.test.results.dir}/clientpositive" className="TestCliDriver"
+ logFile="${test.log.dir}/testclidrivergen.log"/>
</target>
Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/Driver.java?rev=696736&r1=696735&r2=696736&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/Driver.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/Driver.java Thu Sep 18 10:37:59 2008
@@ -18,12 +18,9 @@
package org.apache.hadoop.hive.ql;
-import java.io.File;
import java.io.InputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
+import java.io.Serializable;
import java.util.*;
-
import org.antlr.runtime.tree.CommonTree;
import org.apache.commons.lang.StringUtils;
@@ -37,6 +34,7 @@
import org.apache.hadoop.hive.ql.session.SessionState.LogHelper;
import org.apache.hadoop.hive.ql.exec.Task;
import org.apache.hadoop.hive.ql.exec.MapRedTask;
+import org.apache.hadoop.hive.ql.exec.TaskFactory;
import org.apache.hadoop.hive.ql.exec.Utilities;
import org.apache.hadoop.hive.ql.exec.ExecDriver;
import org.apache.hadoop.hive.conf.HiveConf;
@@ -65,15 +63,15 @@
return terminator;
}
- public int countJobs(Collection tasks) {
+ public int countJobs(List<Task<? extends Serializable>> tasks) {
if (tasks == null)
return 0;
int jobs = 0;
- for (Object task: tasks) {
+ for (Task<? extends Serializable> task: tasks) {
if ((task instanceof ExecDriver) || (task instanceof MapRedTask)) {
jobs++;
}
- jobs += countJobs(((Task) task).getChildTasks());
+ jobs += countJobs(task.getChildTasks());
}
return jobs;
}
@@ -104,11 +102,13 @@
conf.setVar(HiveConf.ConfVars.HIVEQUERYID, command);
try {
+
+ TaskFactory.resetId();
+
BaseSemanticAnalyzer sem;
LOG.info("Starting command: " + command);
- if (resStream != null)
- {
+ if (resStream != null) {
resStream.close();
resStream = null;
}
@@ -126,21 +126,32 @@
// Do semantic analysis and plan generation
sem.analyze(tree, ctx);
LOG.info("Semantic Analysis Completed");
- for(Task rootTask: sem.getRootTasks()) {
- rootTask.initialize(conf);
- }
jobs = countJobs(sem.getRootTasks());
if (jobs > 0) {
console.printInfo("Total MapReduce jobs = " + jobs);
}
+
+
+ String jobname = Utilities.abbreviate(command, maxlen - 6);
+ int curJob = 0;
+ for(Task<? extends Serializable> rootTask: sem.getRootTasks()) {
+ // assumption that only top level tasks are map-reduce tasks
+ if ((rootTask instanceof ExecDriver) || (rootTask instanceof MapRedTask)) {
+ curJob ++;
+ if(noName) {
+ conf.setVar(HiveConf.ConfVars.HADOOPJOBNAME, jobname + "(" + curJob + "/" + jobs + ")");
+ }
+ }
+ rootTask.initialize(conf);
+ }
// A very simple runtime that keeps putting runnable takss
// on a list and when a job completes, it puts the children at the back of the list
// while taking the job to run from the front of the list
- Queue<Task> runnable = new LinkedList<Task>();
+ Queue<Task<? extends Serializable>> runnable = new LinkedList<Task<? extends Serializable>>();
- for(Task rootTask:sem.getRootTasks()) {
+ for(Task<? extends Serializable> rootTask:sem.getRootTasks()) {
if (runnable.offer(rootTask) == false) {
LOG.error("Could not insert the first task into the queue");
return (1);
@@ -148,11 +159,7 @@
}
while(runnable.peek() != null) {
- Task tsk = runnable.remove();
-
- if(noName) {
- conf.setVar(HiveConf.ConfVars.HADOOPJOBNAME, Utilities.abbreviate(command, maxlen));
- }
+ Task<? extends Serializable> tsk = runnable.remove();
int exitVal = tsk.execute();
if (exitVal != 0) {
@@ -166,13 +173,13 @@
continue;
}
- for(Object child: tsk.getChildTasks()) {
+ for(Task<? extends Serializable> child: tsk.getChildTasks()) {
// Check if the child is runnable
- if (!((Task)child).isRunnable()) {
+ if (!child.isRunnable()) {
continue;
}
- if (runnable.offer((Task)child) == false) {
+ if (runnable.offer(child) == false) {
LOG.error("Could not add child task to queue");
}
}
Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/CopyTask.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/CopyTask.java?rev=696736&r1=696735&r2=696736&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/CopyTask.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/CopyTask.java Thu Sep 18 10:37:59 2008
@@ -24,8 +24,6 @@
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FileUtil;
import org.apache.hadoop.fs.FileStatus;
-import org.apache.hadoop.hive.conf.HiveConf;
-import org.apache.hadoop.hive.ql.metadata.Hive;
import org.apache.hadoop.hive.ql.plan.copyWork;
import org.apache.hadoop.hive.ql.parse.LoadSemanticAnalyzer;
import org.apache.hadoop.util.StringUtils;
Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java?rev=696736&r1=696735&r2=696736&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java Thu Sep 18 10:37:59 2008
@@ -47,8 +47,6 @@
import org.apache.hadoop.mapred.TextInputFormat;
import org.apache.hadoop.util.StringUtils;
import org.apache.hadoop.hive.ql.metadata.InvalidTableException;
-import org.apache.hadoop.util.StringUtils;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.facebook.thrift.TException;
Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/ExecDriver.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/ExecDriver.java?rev=696736&r1=696735&r2=696736&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/ExecDriver.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/ExecDriver.java Thu Sep 18 10:37:59 2008
@@ -214,7 +214,7 @@
}
return (returnVal);
}
-
+
private static void printUsage() {
System.out.println("ExecDriver -plan <plan-file> [-jobconf k1=v1 [-jobconf k2=v2] ...]");
System.exit(1);
Added: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/ExplainTask.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/ExplainTask.java?rev=696736&view=auto
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/ExplainTask.java (added)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/ExplainTask.java Thu Sep 18 10:37:59 2008
@@ -0,0 +1,330 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hive.ql.exec;
+
+import java.io.FileOutputStream;
+import java.io.PrintStream;
+import java.io.Serializable;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.apache.hadoop.hive.ql.plan.explain;
+import org.apache.hadoop.hive.ql.plan.explainWork;
+import org.apache.hadoop.util.StringUtils;
+
+
+/**
+ * ExplainTask implementation
+ *
+ **/
+public class ExplainTask extends Task<explainWork> implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ public int execute() {
+
+ try {
+ // If this is an explain plan then return from here
+ PrintStream out = new PrintStream(new FileOutputStream(work.getResFile()));
+
+ // Print out the parse AST
+ outputAST(work.getAstStringTree(), out, 0);
+ out.println();
+
+ outputDependencies(out, work.getRootTasks(), 0);
+ out.println();
+
+ // Go over all the tasks and dump out the plans
+ outputStagePlans(out, work.getRootTasks(), 0);
+
+ return (0);
+ }
+ catch (Exception e) {
+ console.printError("Failed with exception " + e.getMessage(), "\n" + StringUtils.stringifyException(e));
+ return (1);
+ }
+ }
+
+ private String indentString(int indent) {
+ StringBuilder sb = new StringBuilder();
+ for(int i=0; i<indent; ++i) {
+ sb.append(" ");
+ }
+
+ return sb.toString();
+ }
+
+ private void outputMap(Map<?, ?> mp, String header,
+ PrintStream out, boolean extended, int indent)
+ throws Exception {
+
+ boolean first_el = true;
+ for(Entry<?,?> ent: mp.entrySet()) {
+ if (first_el) {
+ out.println(header);
+ }
+ first_el = false;
+
+ // Print the key
+ out.print(indentString(indent));
+ out.printf("%s ", ent.getKey().toString());
+ // Print the value
+ if (isPrintable(ent.getValue())) {
+ out.print(ent.getValue());
+ out.println();
+ }
+ else if (ent.getValue() instanceof Serializable) {
+ out.println();
+ outputPlan((Serializable)ent.getValue(), out, extended, indent+2);
+ }
+ }
+ }
+
+ private void outputList(List<?> l, String header,
+ PrintStream out, boolean extended, int indent)
+ throws Exception {
+
+ boolean first_el = true;
+ boolean nl = false;
+ for(Object o: l) {
+ if (first_el) {
+ out.print(header);
+ }
+
+ if (isPrintable(o)) {
+ if (!first_el) {
+ out.print(", ");
+ } else {
+ out.print(" ");
+ }
+
+ out.print(o);
+ nl = true;
+ }
+ else if (o instanceof Serializable) {
+ if (first_el) {
+ out.println();
+ }
+ outputPlan((Serializable)o, out, extended, indent+2);
+ }
+
+ first_el = false;
+ }
+
+ if (nl) {
+ out.println();
+ }
+ }
+
+ private boolean isPrintable(Object val) {
+ if (val instanceof String ||
+ val instanceof Integer ||
+ val instanceof Byte ||
+ val instanceof Float ||
+ val instanceof Double) {
+ return true;
+ }
+
+ if (val.getClass().isPrimitive()) {
+ return true;
+ }
+
+ return false;
+ }
+
+ private void outputPlan(Serializable work, PrintStream out, boolean extended, int indent)
+ throws Exception {
+ // Check if work has an explain annotation
+ Annotation note = work.getClass().getAnnotation(explain.class);
+
+ if (note instanceof explain) {
+ explain xpl_note = (explain)note;
+ if (extended || xpl_note.normalExplain()) {
+ out.print(indentString(indent));
+ out.println(xpl_note.displayName());
+ }
+ }
+
+ // If this is an operator then we need to call the plan generation on the conf and then
+ // the children
+ if (work instanceof Operator) {
+ Operator<? extends Serializable> operator = (Operator<? extends Serializable>) work;
+ if (operator.getConf() != null) {
+ outputPlan(operator.getConf(), out, extended, indent);
+ }
+ if (operator.getChildOperators() != null) {
+ for(Operator<? extends Serializable> op: operator.getChildOperators()) {
+ outputPlan(op, out, extended, indent+2);
+ }
+ }
+ return;
+ }
+
+ // We look at all methods that generate values for explain
+ for(Method m: work.getClass().getMethods()) {
+ int prop_indents = indent+2;
+ note = m.getAnnotation(explain.class);
+
+ if (note instanceof explain) {
+ explain xpl_note = (explain)note;
+
+ if (extended || xpl_note.normalExplain()) {
+
+ Object val = m.invoke(work);
+
+ if (val == null) {
+ continue;
+ }
+
+ String header = null;
+ if (!xpl_note.displayName().equals("")){
+ header = indentString(prop_indents) + xpl_note.displayName() +":";
+ } else {
+ prop_indents = indent;
+ header = indentString(prop_indents);
+ }
+
+ if (isPrintable(val)) {
+
+ out.printf("%s ", header);
+ out.println(val);
+ continue;
+ }
+ // Try this as a map
+ try {
+ // Go through the map and print out the stuff
+ Map<?,?> mp = (Map<?,?>)val;
+ outputMap(mp, header, out, extended, prop_indents+2);
+ continue;
+ }
+ catch (ClassCastException ce) {
+ // Ignore - all this means is that this is not a map
+ }
+
+ // Try this as a list
+ try {
+ List<?> l = (List<?>)val;
+ outputList(l, header, out, extended, prop_indents+2);
+
+ continue;
+ }
+ catch (ClassCastException ce) {
+ // Ignore
+ }
+
+
+ // Finally check if it is serializable
+ try {
+ Serializable s = (Serializable)val;
+ out.println(header);
+ outputPlan(s, out, extended, prop_indents+2);
+
+ continue;
+ }
+ catch (ClassCastException ce) {
+ // Ignore
+ }
+ }
+ }
+ }
+ }
+
+ private void outputPlan(Task<? extends Serializable> task, PrintStream out,
+ boolean extended, HashSet<Task<? extends Serializable>> displayedSet,
+ int indent)
+ throws Exception {
+
+ if (displayedSet.contains(task)) {
+ return;
+ }
+ displayedSet.add(task);
+
+ out.print(indentString(indent));
+ out.printf("Stage: %s\n", task.getId());
+ // Start by getting the work part of the task and call the output plan for the work
+ outputPlan(task.getWork(), out, extended, indent+2);
+ out.println();
+ if (task.getChildTasks() != null) {
+ for(Task<? extends Serializable> child: task.getChildTasks()) {
+ outputPlan(child, out, extended, displayedSet, indent);
+ }
+ }
+ }
+
+ private void outputDependencies(Task<? extends Serializable> task, PrintStream out, int indent)
+ throws Exception {
+
+ out.print(indentString(indent));
+ out.printf("%s", task.getId());
+ if (task.getParentTasks() == null || task.getParentTasks().isEmpty()) {
+ out.print(" is a root stage");
+ }
+ else {
+ out.print(" depends on stages: ");
+ boolean first = true;
+ for(Task<? extends Serializable> parent: task.getParentTasks()) {
+ if (!first) {
+ out.print(", ");
+ }
+ first = false;
+ out.print(parent.getId());
+ }
+ }
+ out.println();
+
+ if (task.getChildTasks() != null) {
+ for(Task<? extends Serializable> child: task.getChildTasks()) {
+ outputDependencies(child, out, indent);
+ }
+ }
+ }
+
+ public void outputAST(String treeString, PrintStream out, int indent) {
+ out.print(indentString(indent));
+ out.println("ABSTRACT SYNTAX TREE:");
+ out.print(indentString(indent+2));
+ out.println(treeString);
+ }
+
+ public void outputDependencies(PrintStream out,
+ List<Task<? extends Serializable>> rootTasks,
+ int indent)
+ throws Exception {
+ out.print(indentString(indent));
+ out.println("STAGE DEPENDENCIES:");
+ for(Task<? extends Serializable> rootTask: rootTasks) {
+ outputDependencies(rootTask, out, indent+2);
+ }
+ }
+
+ public void outputStagePlans(PrintStream out,
+ List<Task<? extends Serializable>> rootTasks,
+ int indent)
+ throws Exception {
+ out.print(indentString(indent));
+ out.println("STAGE PLANS:");
+ for(Task<? extends Serializable> rootTask: rootTasks) {
+ outputPlan(rootTask, out, work.getExtended(),
+ new HashSet<Task<? extends Serializable>>(), indent+2);
+ }
+ }
+}
Added: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionInfo.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionInfo.java?rev=696736&view=auto
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionInfo.java (added)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionInfo.java Thu Sep 18 10:37:59 2008
@@ -0,0 +1,82 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hive.ql.exec;
+
+public class FunctionInfo {
+
+ private String displayName;
+
+ private OperatorType opType;
+
+ private boolean isOperator;
+
+ private Class<? extends UDF> udfClass;
+
+ private Class<? extends UDAF> udafClass;
+
+ public static enum OperatorType { NO_OP, PREFIX, INFIX, POSTFIX };
+
+ public FunctionInfo(String displayName, Class<? extends UDF> udfClass, Class<? extends UDAF> udafClass) {
+ assert(udfClass == null || udafClass == null);
+ this.displayName = displayName;
+ opType = OperatorType.NO_OP;
+ isOperator = false;
+ this.udfClass = udfClass;
+ this.udafClass = udafClass;
+ }
+
+ public FunctionInfo(String displayName, OperatorType opType, Class<? extends UDF> udfClass) {
+ this.displayName = displayName;
+ this.opType = opType;
+ this.udfClass = udfClass;
+ this.udafClass = null;
+ }
+
+ public boolean isAggFunction() {
+ return (udafClass != null && udfClass == null);
+ }
+
+ public boolean isOperator() {
+ return isOperator;
+ }
+
+ public void setIsOperator(boolean val) {
+ isOperator = val;
+ }
+
+ public void setOpType(OperatorType opt) {
+ opType = opt;
+ }
+
+ public OperatorType getOpType() {
+ return opType;
+ }
+
+ public Class<? extends UDF> getUDFClass() {
+ return udfClass;
+ }
+
+ public Class<? extends UDAF> getUDAFClass() {
+ return udafClass;
+ }
+
+ public String getDisplayName() {
+ return displayName;
+ }
+}
Added: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java?rev=696736&view=auto
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java (added)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java Thu Sep 18 10:37:59 2008
@@ -0,0 +1,322 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hive.ql.exec;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.lang.Void;
+
+import org.apache.hadoop.hive.ql.exec.FunctionInfo.OperatorType;
+import org.apache.hadoop.hive.ql.parse.TypeInfo;
+import org.apache.hadoop.hive.ql.udf.*;
+
+public class FunctionRegistry {
+
+ private static Log LOG = LogFactory.getLog("org.apache.hadoop.hive.ql.exec.FunctionRegistry");
+
+ /**
+ * The mapping from expression function names to expression classes.
+ */
+ static HashMap<String, FunctionInfo> mFunctions;
+ static {
+ mFunctions = new HashMap<String, FunctionInfo>();
+ registerUDF("default_sample_hashfn", UDFDefaultSampleHashFn.class,
+ OperatorType.PREFIX, false);
+ registerUDF("concat", UDFConcat.class, OperatorType.PREFIX, false);
+ registerUDF("substr", UDFSubstr.class, OperatorType.PREFIX, false);
+ registerUDF("str_eq", UDFStrEq.class, OperatorType.PREFIX, false);
+ registerUDF("str_ne", UDFStrNe.class, OperatorType.PREFIX, false);
+ registerUDF("str_gt", UDFStrGt.class, OperatorType.PREFIX, false);
+ registerUDF("str_lt", UDFStrLt.class, OperatorType.PREFIX, false);
+ registerUDF("str_ge", UDFStrGe.class, OperatorType.PREFIX, false);
+ registerUDF("str_le", UDFStrLe.class, OperatorType.PREFIX, false);
+
+ registerUDF("upper", UDFUpper.class, OperatorType.PREFIX, false);
+ registerUDF("lower", UDFLower.class, OperatorType.PREFIX, false);
+ registerUDF("ucase", UDFUpper.class, OperatorType.PREFIX, false);
+ registerUDF("lcase", UDFLower.class, OperatorType.PREFIX, false);
+ registerUDF("trim", UDFTrim.class, OperatorType.PREFIX, false);
+ registerUDF("ltrim", UDFLTrim.class, OperatorType.PREFIX, false);
+ registerUDF("rtrim", UDFRTrim.class, OperatorType.PREFIX, false);
+
+ registerUDF("like", UDFLike.class, OperatorType.INFIX, true);
+ registerUDF("rlike", UDFRegExp.class, OperatorType.INFIX, true);
+ registerUDF("regexp", UDFRegExp.class, OperatorType.INFIX, true);
+ registerUDF("regexp_replace", UDFRegExpReplace.class, OperatorType.PREFIX, false);
+
+ registerUDF("+", UDFOPPlus.class, OperatorType.INFIX, true);
+ registerUDF("-", UDFOPMinus.class, OperatorType.INFIX, true);
+ registerUDF("*", UDFOPMultiply.class, OperatorType.INFIX, true);
+ registerUDF("/", UDFOPDivide.class, OperatorType.INFIX, true);
+ registerUDF("%", UDFOPMod.class, OperatorType.INFIX, true);
+
+ registerUDF("&", UDFOPBitAnd.class, OperatorType.INFIX, true);
+ registerUDF("|", UDFOPBitOr.class, OperatorType.INFIX, true);
+ registerUDF("^", UDFOPBitXor.class, OperatorType.INFIX, true);
+ registerUDF("~", UDFOPBitNot.class, OperatorType.INFIX, true);
+
+ registerUDF("=", UDFOPEqual.class, OperatorType.INFIX, true);
+ registerUDF("==", UDFOPEqual.class, OperatorType.INFIX, true, "=");
+ registerUDF("<>", UDFOPNotEqual.class, OperatorType.INFIX, true);
+ registerUDF("<", UDFOPLessThan.class, OperatorType.INFIX, true);
+ registerUDF("<=", UDFOPEqualOrLessThan.class, OperatorType.INFIX, true);
+ registerUDF(">", UDFOPGreaterThan.class, OperatorType.INFIX, true);
+ registerUDF(">=", UDFOPEqualOrGreaterThan.class, OperatorType.INFIX, true);
+
+ registerUDF("and", UDFOPAnd.class, OperatorType.INFIX, true);
+ registerUDF("&&", UDFOPAnd.class, OperatorType.INFIX, true, "and");
+ registerUDF("or", UDFOPOr.class, OperatorType.INFIX, true);
+ registerUDF("||", UDFOPOr.class, OperatorType.INFIX, true, "or");
+ registerUDF("not", UDFOPNot.class, OperatorType.INFIX, true);
+ registerUDF("!", UDFOPNot.class, OperatorType.INFIX, true, "not");
+
+ registerUDF("isnull", UDFOPNull.class, OperatorType.POSTFIX, true, "is null");
+ registerUDF("isnotnull", UDFOPNotNull.class, OperatorType.POSTFIX, true, "is not null");
+
+ // Aliases for Java Class Names
+ // These are used in getImplicitConvertUDFMethod
+ registerUDF(Boolean.class.getName(), UDFToBoolean.class, OperatorType.PREFIX, false,
+ UDFToBoolean.class.getSimpleName());
+ registerUDF(Byte.class.getName(), UDFToByte.class, OperatorType.PREFIX, false,
+ UDFToByte.class.getSimpleName());
+ registerUDF(Integer.class.getName(), UDFToInteger.class, OperatorType.PREFIX, false,
+ UDFToInteger.class.getSimpleName());
+ registerUDF(Long.class.getName(), UDFToLong.class, OperatorType.PREFIX, false,
+ UDFToLong.class.getSimpleName());
+ registerUDF(Float.class.getName(), UDFToFloat.class, OperatorType.PREFIX, false,
+ UDFToFloat.class.getSimpleName());
+ registerUDF(Double.class.getName(), UDFToDouble.class, OperatorType.PREFIX, false,
+ UDFToDouble.class.getSimpleName());
+ registerUDF(String.class.getName(), UDFToString.class, OperatorType.PREFIX, false,
+ UDFToString.class.getSimpleName());
+ registerUDF(java.sql.Date.class.getName(), UDFToDate.class, OperatorType.PREFIX, false,
+ UDFToDate.class.getSimpleName());
+
+ // Aggregate functions
+ registerUDAF("sum", UDAFSum.class);
+ registerUDAF("count", UDAFCount.class);
+ registerUDAF("max", UDAFMax.class);
+ registerUDAF("min", UDAFMin.class);
+ registerUDAF("avg", UDAFAvg.class);
+ }
+
+ public static FunctionInfo getInfo(Class<?> fClass) {
+ for(Map.Entry<String, FunctionInfo> ent: mFunctions.entrySet()) {
+ FunctionInfo val = ent.getValue();
+ if (val.getUDFClass() == fClass ||
+ val.getUDAFClass() == fClass) {
+ return val;
+ }
+ }
+
+ return null;
+ }
+
+ public static void registerUDF(String functionName, Class<? extends UDF> UDFClass,
+ FunctionInfo.OperatorType opt, boolean isOperator) {
+ if (UDF.class.isAssignableFrom(UDFClass)) {
+ FunctionInfo fI = new FunctionInfo(functionName.toLowerCase(), UDFClass, null);
+ fI.setIsOperator(isOperator);
+ fI.setOpType(opt);
+ mFunctions.put(functionName.toLowerCase(), fI);
+ } else {
+ throw new RuntimeException("Registering UDF Class " + UDFClass + " which does not extends " + UDF.class);
+ }
+ }
+
+ public static void registerUDF(String functionName, Class<? extends UDF> UDFClass,
+ FunctionInfo.OperatorType opt, boolean isOperator,
+ String displayName) {
+ if (UDF.class.isAssignableFrom(UDFClass)) {
+ FunctionInfo fI = new FunctionInfo(displayName, UDFClass, null);
+ fI.setIsOperator(isOperator);
+ fI.setOpType(opt);
+ mFunctions.put(functionName.toLowerCase(), fI);
+ } else {
+ throw new RuntimeException("Registering UDF Class " + UDFClass + " which does not extends " + UDF.class);
+ }
+ }
+
+ public static Class<? extends UDF> getUDFClass(String functionName) {
+ LOG.debug("Looking up: " + functionName);
+ FunctionInfo finfo = mFunctions.get(functionName.toLowerCase());
+ if (finfo == null) {
+ return null;
+ }
+ Class<? extends UDF> result = finfo.getUDFClass();
+ return result;
+ }
+
+ static Map<Class<?>, Integer> numericTypes;
+ static {
+ numericTypes = new HashMap<Class<?>, Integer>();
+ numericTypes.put(Byte.class, 1);
+ numericTypes.put(Integer.class, 2);
+ numericTypes.put(Long.class, 3);
+ numericTypes.put(Float.class, 4);
+ numericTypes.put(Double.class, 5);
+ numericTypes.put(String.class, 6);
+ }
+
+ /**
+ * Find a common class that objects of both Class a and Class b can convert to.
+ * @return null if no common class could be found.
+ */
+ public static Class<?> getCommonClass(Class<?> a, Class<?> b) {
+ // Equal
+ if (a.equals(b)) return a;
+ // Java class inheritance hierarchy
+ if (a.isAssignableFrom(b)) return a;
+ if (b.isAssignableFrom(a)) return b;
+ // Prefer String to Number conversion before implicit conversions
+ if (Number.class.isAssignableFrom(a) && b.equals(String.class)) return Double.class;
+ if (Number.class.isAssignableFrom(b) && a.equals(String.class)) return Double.class;
+ // implicit conversions
+ if (FunctionRegistry.implicitConvertable(a, b)) return b;
+ if (FunctionRegistry.implicitConvertable(b, a)) return a;
+ return null;
+ }
+
+ /** Returns whether it is possible to implicitly convert an object of Class from to Class to.
+ */
+ public static boolean implicitConvertable(Class<?> from, Class<?> to) {
+ assert(!from.equals(to));
+ // Allow implicit String to Double conversion
+ if (from.equals(String.class) && to.equals(Double.class)) {
+ return true;
+ }
+ if (from.equals(String.class) && to.equals(java.sql.Date.class)) {
+ return true;
+ }
+ if (from.equals(java.sql.Date.class) && to.equals(String.class)) {
+ return true;
+ }
+ // Allow implicit conversion from Byte -> Integer -> Long -> Float -> Double -> String
+ Integer f = numericTypes.get(from);
+ Integer t = numericTypes.get(to);
+ if (f == null || t == null) return false;
+ if (f.intValue() > t.intValue()) return false;
+ return true;
+ }
+
+ /**
+ * Get the UDF method for the name and argumentClasses.
+ * @param name the name of the UDF
+ * @param argumentClasses
+ * @param exact if true, we don't allow implicit type conversions.
+ * @return
+ */
+ public static Method getUDFMethod(String name, boolean exact, List<Class<?>> argumentClasses) {
+ Class<? extends UDF> udf = getUDFClass(name);
+ if (udf == null) return null;
+ return getMethodInternal(udf, "evaluate", exact, argumentClasses);
+ }
+
+ /**
+ * This method is shared between UDFRegistry and UDAFRegistry.
+ * methodName will be "evaluate" for UDFRegistry, and "aggregate" for UDAFRegistry.
+ */
+ public static <T> Method getMethodInternal(Class<? extends T> udfClass, String methodName, boolean exact, List<Class<?>> argumentClasses) {
+ int leastImplicitConversions = Integer.MAX_VALUE;
+ Method udfMethod = null;
+
+ for(Method m: Arrays.asList(udfClass.getMethods())) {
+ if (m.getName().equals(methodName)) {
+
+ Class<?>[] argumentTypeInfos = m.getParameterTypes();
+
+ boolean match = (argumentTypeInfos.length == argumentClasses.size());
+ int implicitConversions = 0;
+
+ for(int i=0; i<argumentClasses.size() && match; i++) {
+ if (argumentClasses.get(i) == Void.class) continue;
+ Class<?> accepted = TypeInfo.generalizePrimitive(argumentTypeInfos[i]);
+ if (accepted.isAssignableFrom(argumentClasses.get(i))) {
+ // do nothing if match
+ } else if (!exact && implicitConvertable(argumentClasses.get(i), accepted)) {
+ implicitConversions ++;
+ } else {
+ match = false;
+ }
+ }
+
+ if (match) {
+ // Always choose the function with least implicit conversions.
+ if (implicitConversions < leastImplicitConversions) {
+ udfMethod = m;
+ leastImplicitConversions = implicitConversions;
+ // Found an exact match
+ if (leastImplicitConversions == 0) break;
+ } else if (implicitConversions == leastImplicitConversions){
+ // Ambiguous call: two methods with the same number of implicit conversions
+ udfMethod = null;
+ } else {
+ // do nothing if implicitConversions > leastImplicitConversions
+ }
+ }
+ }
+ }
+ return udfMethod;
+ }
+
+ public static Method getUDFMethod(String name, boolean exact, Class<?> ... argumentClasses) {
+ return getUDFMethod(name, exact, Arrays.asList(argumentClasses));
+ }
+
+ public static void registerUDAF(String functionName, Class<? extends UDAF> UDAFClass) {
+
+ if (UDAF.class.isAssignableFrom(UDAFClass)) {
+ mFunctions.put(functionName.toLowerCase(), new FunctionInfo(functionName
+ .toLowerCase(), null, UDAFClass));
+ } else {
+ throw new RuntimeException("Registering UDAF Class " + UDAFClass
+ + " which does not extends " + UDAF.class);
+ }
+ mFunctions.put(functionName.toLowerCase(), new FunctionInfo(functionName
+ .toLowerCase(), null, UDAFClass));
+ }
+
+ public static Class<? extends UDAF> getUDAF(String functionName) {
+ LOG.debug("Looking up UDAF: " + functionName);
+ FunctionInfo finfo = mFunctions.get(functionName.toLowerCase());
+ if (finfo == null) {
+ return null;
+ }
+ Class<? extends UDAF> result = finfo.getUDAFClass();
+ return result;
+ }
+
+ public static Method getUDAFMethod(String name, List<Class<?>> argumentClasses) {
+ Class<? extends UDAF> udaf = getUDAF(name);
+ if (udaf == null)
+ return null;
+ return FunctionRegistry.getMethodInternal(udaf, "aggregate", false,
+ argumentClasses);
+ }
+
+ public static Method getUDAFMethod(String name, Class<?>... argumentClasses) {
+ return getUDAFMethod(name, Arrays.asList(argumentClasses));
+ }
+}
Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/Operator.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/Operator.java?rev=696736&r1=696735&r2=696736&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/Operator.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/Operator.java Thu Sep 18 10:37:59 2008
@@ -28,7 +28,7 @@
import org.apache.hadoop.conf.Configuration;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-
+import org.apache.hadoop.hive.ql.plan.explain;
/**
* Base operator implementation
@@ -38,6 +38,7 @@
// Bean methods
private static final long serialVersionUID = 1L;
+
protected List<Operator<? extends Serializable>> childOperators;
public Operator() {}
@@ -57,6 +58,7 @@
this.conf = conf;
}
+ @explain
public T getConf() {
return conf;
}
@@ -96,7 +98,7 @@
if(childOperators == null)
return;
- for(Operator op: childOperators) {
+ for(Operator<? extends Serializable> op: childOperators) {
op.setOutputCollector(out);
}
}
@@ -148,9 +150,9 @@
- public Map<Enum, Long> getStats() {
- HashMap<Enum, Long> ret = new HashMap<Enum, Long> ();
- for(Enum one: statsMap.keySet()) {
+ public Map<Enum<?>, Long> getStats() {
+ HashMap<Enum<?>, Long> ret = new HashMap<Enum<?>, Long> ();
+ for(Enum<?> one: statsMap.keySet()) {
ret.put(one, Long.valueOf(statsMap.get(one).get()));
}
return(ret);
@@ -226,7 +228,7 @@
}
public void resetStats() {
- for(Enum e: statsMap.keySet()) {
+ for(Enum<?> e: statsMap.keySet()) {
statsMap.get(e).set(0L);
}
}
@@ -246,7 +248,7 @@
}
public void logStats () {
- for(Enum e: statsMap.keySet()) {
+ for(Enum<?> e: statsMap.keySet()) {
l4j.info(e.toString() + ":" + statsMap.get(e).toString());
}
}
Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskFactory.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskFactory.java?rev=696736&r1=696735&r2=696736&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskFactory.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskFactory.java Thu Sep 18 10:37:59 2008
@@ -41,22 +41,32 @@
public static ArrayList<taskTuple<? extends Serializable>> taskvec;
static {
+ id = 0;
taskvec = new ArrayList<taskTuple<? extends Serializable>>();
taskvec.add(new taskTuple<moveWork>(moveWork.class, MoveTask.class));
taskvec.add(new taskTuple<copyWork>(copyWork.class, CopyTask.class));
taskvec.add(new taskTuple<DDLWork>(DDLWork.class, DDLTask.class));
+ taskvec.add(new taskTuple<explainWork>(explainWork.class, ExplainTask.class));
// we are taking this out to allow us to instantiate either MapRedTask or
// ExecDriver dynamically at run time based on configuration
// taskvec.add(new taskTuple<mapredWork>(mapredWork.class, ExecDriver.class));
}
+ private static int id;
+
+ public static void resetId() {
+ id = 0;
+ }
+
@SuppressWarnings("unchecked")
public static <T extends Serializable> Task<T> get(Class<T> workClass, HiveConf conf) {
for(taskTuple<? extends Serializable> t: taskvec) {
if(t.workClass == workClass) {
try {
- return (Task<T>)t.taskClass.newInstance();
+ Task<T> ret = (Task<T>)t.taskClass.newInstance();
+ ret.setId("Stage-" + Integer.toString(id++));
+ return ret;
} catch (Exception e) {
throw new RuntimeException(e);
}
@@ -71,12 +81,15 @@
// in local mode - or if otherwise so configured - always submit
// jobs via separate jvm
+ Task<T> ret = null;
if(conf.getVar(HiveConf.ConfVars.HADOOPJT).equals("local") ||
viachild.equals("true")) {
- return (Task<T>)MapRedTask.class.newInstance();
+ ret = (Task<T>)MapRedTask.class.newInstance();
} else {
- return (Task<T>)ExecDriver.class.newInstance();
+ ret = (Task<T>)ExecDriver.class.newInstance();
}
+ ret.setId("Stage-" + Integer.toString(id++));
+ return ret;
} catch (Exception e) {
throw new RuntimeException (e.getMessage(), e);
}
Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java?rev=696736&r1=696735&r2=696736&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java Thu Sep 18 10:37:59 2008
@@ -34,6 +34,7 @@
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.hive.serde.simple_meta.MetadataTypedColumnsetSerDe;
+import org.apache.hadoop.hive.metastore.api.FieldSchema;
import org.apache.hadoop.hive.ql.plan.*;
import org.apache.hadoop.hive.ql.plan.PlanUtils.ExpressionTypes;
import org.apache.hadoop.hive.ql.metadata.Table;
@@ -90,6 +91,19 @@
}
}
+ public static List<String> getFieldSchemaString(List<FieldSchema> fl) {
+ if (fl == null) {
+ return null;
+ }
+
+ ArrayList<String> ret = new ArrayList<String>();
+ for(FieldSchema f: fl) {
+ ret.add(f.getName() + " " + f.getType() +
+ (f.getComment() != null ? (" " + f.getComment()) : ""));
+ }
+ return ret;
+ }
+
/**
* Java 1.5 workaround.
* From http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5015403
Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java?rev=696736&r1=696735&r2=696736&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java Thu Sep 18 10:37:59 2008
@@ -30,6 +30,7 @@
import org.apache.hadoop.hive.ql.metadata.*;
import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hadoop.hive.ql.exec.Task;
+import org.apache.hadoop.hive.ql.exec.TaskFactory;
import org.apache.hadoop.hive.ql.session.SessionState.LogHelper;
public abstract class BaseSemanticAnalyzer {
@@ -44,6 +45,7 @@
protected final LogHelper console;
protected Context ctx;
+
public BaseSemanticAnalyzer(HiveConf conf) throws SemanticException {
try {
this.conf = conf;
@@ -62,7 +64,7 @@
}
public abstract void analyze(CommonTree ast, Context ctx) throws SemanticException;
-
+
public List<Task<? extends Serializable>> getRootTasks() {
return rootTasks;
}
Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java?rev=696736&r1=696735&r2=696736&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java Thu Sep 18 10:37:59 2008
@@ -65,6 +65,7 @@
super(conf);
}
+ @Override
public void analyze(CommonTree ast, Context ctx) throws SemanticException {
this.ctx = ctx;
if (ast.getToken().getType() == HiveParser.TOK_CREATETABLE)
Added: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/ExplainSemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/ExplainSemanticAnalyzer.java?rev=696736&view=auto
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/ExplainSemanticAnalyzer.java (added)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/ExplainSemanticAnalyzer.java Thu Sep 18 10:37:59 2008
@@ -0,0 +1,54 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hive.ql.parse;
+
+import java.io.File;
+
+import org.antlr.runtime.tree.CommonTree;
+import org.apache.hadoop.hive.conf.HiveConf;
+import org.apache.hadoop.hive.ql.Context;
+import org.apache.hadoop.hive.ql.exec.TaskFactory;
+import org.apache.hadoop.hive.ql.plan.explainWork;
+
+public class ExplainSemanticAnalyzer extends BaseSemanticAnalyzer {
+
+
+ public ExplainSemanticAnalyzer(HiveConf conf) throws SemanticException {
+ super(conf);
+ }
+
+ public void analyze(CommonTree ast, Context ctx) throws SemanticException {
+
+ // Create a semantic analyzer for the query
+ BaseSemanticAnalyzer sem = SemanticAnalyzerFactory.get(conf, (CommonTree)ast.getChild(0));
+ sem.analyze((CommonTree)ast.getChild(0), ctx);
+
+ boolean extended = false;
+ if (ast.getChildCount() > 1) {
+ extended = true;
+ }
+
+ ctx.setResFile(new File(getTmpFileName()));
+
+ rootTasks.add(TaskFactory.get(new explainWork(ctx.getResFile(),
+ sem.getRootTasks(),
+ ((CommonTree)ast.getChild(0)).toStringTree(),
+ extended), this.conf));
+ }
+}
Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g?rev=696736&r1=696735&r2=696736&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g Thu Sep 18 10:37:59 2008
@@ -97,6 +97,7 @@
TOK_TABLELOCATION;
TOK_TABLESAMPLE;
TOK_TMP_FILE;
+TOK_EXPLAIN;
}
@@ -115,9 +116,18 @@
// starting rule
statement
- : queryStatementExpression EOF
- | loadStatement EOF
- | ddlStatement EOF
+ : explainStatement EOF
+ | execStatement EOF
+ ;
+
+explainStatement
+ : KW_EXPLAIN (isExtended=KW_EXTENDED)? execStatement -> ^(TOK_EXPLAIN execStatement $isExtended?)
+ ;
+
+execStatement
+ : queryStatementExpression
+ | loadStatement
+ | ddlStatement
;
loadStatement
@@ -766,6 +776,8 @@
KW_COLUMNS: 'COLUMNS';
KW_RLIKE: 'RLIKE';
KW_REGEXP: 'REGEXP';
+KW_EXPLAIN: 'EXPLAIN';
+KW_EXTENDED: 'EXTENDED';
// Operators
Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java?rev=696736&r1=696735&r2=696736&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java Thu Sep 18 10:37:59 2008
@@ -19,6 +19,7 @@
package org.apache.hadoop.hive.ql.parse;
import java.io.IOException;
+import java.io.Serializable;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
@@ -28,8 +29,6 @@
import org.antlr.runtime.tree.CommonTree;
import org.antlr.runtime.tree.Tree;
import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
@@ -156,6 +155,7 @@
}
}
+ @Override
public void analyze(CommonTree ast, Context ctx) throws SemanticException {
isLocal = isOverWrite = false;
Tree from_t = ast.getChild(0);
@@ -191,7 +191,7 @@
// make sure the arguments make sense
applyConstraints(fromURI, toURI, from_t, isLocal);
- Task rTask = null;
+ Task<? extends Serializable> rTask = null;
// create copy work
if(isLocal) {
Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/PartitionPruner.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/PartitionPruner.java?rev=696736&r1=696735&r2=696736&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/PartitionPruner.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/PartitionPruner.java Thu Sep 18 10:37:59 2008
@@ -29,14 +29,11 @@
import java.util.*;
import org.antlr.runtime.tree.*;
-import org.apache.hadoop.hive.ql.exec.ColumnInfo;
import org.apache.hadoop.hive.ql.exec.ExprNodeEvaluator;
import org.apache.hadoop.hive.ql.exec.ExprNodeEvaluatorFactory;
import org.apache.hadoop.hive.ql.exec.HiveObject;
import org.apache.hadoop.hive.ql.exec.LabeledCompositeHiveObject;
import org.apache.hadoop.hive.ql.exec.PrimitiveHiveObject;
-import org.apache.hadoop.hive.ql.exec.UDF;
-import org.apache.hadoop.hive.ql.exec.UDFRegistry;
import org.apache.hadoop.hive.ql.metadata.*;
import org.apache.hadoop.hive.ql.plan.exprNodeColumnDesc;
import org.apache.hadoop.hive.ql.plan.exprNodeConstantDesc;
Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/RowResolver.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/RowResolver.java?rev=696736&r1=696735&r2=696736&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/RowResolver.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/RowResolver.java Thu Sep 18 10:37:59 2008
@@ -143,12 +143,12 @@
public String toString() {
StringBuffer sb = new StringBuffer();
- for(Map.Entry e: rslvMap.entrySet()) {
+ for(Map.Entry<String, LinkedHashMap<String,ColumnInfo>> e: rslvMap.entrySet()) {
String tab = (String)e.getKey();
sb.append(tab + "{");
HashMap<String, ColumnInfo> f_map = (HashMap<String, ColumnInfo>)e.getValue();
if (f_map != null)
- for(Map.Entry entry: f_map.entrySet()) {
+ for(Map.Entry<String, ColumnInfo> entry: f_map.entrySet()) {
sb.append("(" + (String)entry.getKey() + "," + entry.getValue().toString() + ")");
}
sb.append("} ");
Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java?rev=696736&r1=696735&r2=696736&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java Thu Sep 18 10:37:59 2008
@@ -134,7 +134,7 @@
assert (expressionTree.getChildCount() != 0);
assert (expressionTree.getChild(0).getType() == HiveParser.Identifier);
String functionName = expressionTree.getChild(0).getText();
- if (UDAFRegistry.getUDAF(functionName) != null) {
+ if (FunctionRegistry.getUDAF(functionName) != null) {
aggregations.put(expressionTree.toStringTree(), expressionTree);
return;
}
@@ -987,7 +987,7 @@
for (Map.Entry<String, CommonTree> entry : aggregationTrees.entrySet()) {
CommonTree value = entry.getValue();
String aggName = value.getChild(0).getText();
- Class<? extends UDAF> aggClass = UDAFRegistry.getUDAF(aggName);
+ Class<? extends UDAF> aggClass = FunctionRegistry.getUDAF(aggName);
assert (aggClass != null);
ArrayList<exprNodeDesc> aggParameters = new ArrayList<exprNodeDesc>();
ArrayList<Class<?>> aggClasses = new ArrayList<Class<?>>();
@@ -1006,7 +1006,7 @@
aggClasses.add(paraExprInfo.getType().getPrimitiveClass());
}
- if (null == UDAFRegistry.getUDAFMethod(aggName, aggClasses)) {
+ if (null == FunctionRegistry.getUDAFMethod(aggName, aggClasses)) {
String reason = "Looking for UDAF \"" + aggName + "\" with parameters " + aggClasses;
throw new SemanticException(ErrorMsg.INVALID_FUNCTION_SIGNATURE.getMsg((CommonTree)value.getChild(0), reason));
}
@@ -1059,7 +1059,7 @@
for (Map.Entry<String, CommonTree> entry : aggregationTrees.entrySet()) {
CommonTree value = entry.getValue();
String aggName = value.getChild(0).getText();
- Class<? extends UDAF> aggClass = UDAFRegistry.getUDAF(aggName);
+ Class<? extends UDAF> aggClass = FunctionRegistry.getUDAF(aggName);
assert (aggClass != null);
ArrayList<exprNodeDesc> aggParameters = new ArrayList<exprNodeDesc>();
ArrayList<Class<?>> aggClasses = new ArrayList<Class<?>>();
@@ -1078,7 +1078,7 @@
aggClasses.add(paraExprInfo.getType().getPrimitiveClass());
}
- if (null == UDAFRegistry.getUDAFMethod(aggName, aggClasses)) {
+ if (null == FunctionRegistry.getUDAFMethod(aggName, aggClasses)) {
String reason = "Looking for UDAF \"" + aggName + "\" with parameters " + aggClasses;
throw new SemanticException(ErrorMsg.INVALID_FUNCTION_SIGNATURE.getMsg((CommonTree)value.getChild(0), reason));
}
@@ -1288,8 +1288,7 @@
int inputField = reduceKeys.size();
HashMap<String, CommonTree> aggregationTrees = parseInfo
.getAggregationExprsForClause(dest);
- for (Map.Entry entry : aggregationTrees.entrySet()) {
- String key = (String)entry.getKey();
+ for (Map.Entry<String, CommonTree> entry : aggregationTrees.entrySet()) {
reduceValues.add(new exprNodeColumnDesc(TypeInfo.getPrimitiveTypeInfo(String.class),
(Integer.valueOf(inputField)).toString()));
inputField++;
@@ -1336,7 +1335,7 @@
for (Map.Entry<String, CommonTree> entry : aggregationTrees.entrySet()) {
CommonTree value = entry.getValue();
String aggName = value.getChild(0).getText();
- Class<? extends UDAF> aggClass = UDAFRegistry.getUDAF(aggName);
+ Class<? extends UDAF> aggClass = FunctionRegistry.getUDAF(aggName);
assert (aggClass != null);
ArrayList<exprNodeDesc> aggParameters = new ArrayList<exprNodeDesc>();
String text = entry.getKey();
@@ -1535,7 +1534,7 @@
// We have the table object here - go over the row resolver
// and check all the types are the same
- Vector<ColumnInfo> srcOpns = input.get(0).getRowResolver().getColumnInfos();
+ input.get(0).getRowResolver().getColumnInfos();
Vector<ColumnInfo> insOpns = new Vector<ColumnInfo>();
for (SerDeField field : dest_tab.getFields(null)) {
@@ -1836,7 +1835,7 @@
for(int i=1; i<right.length; i++) {
Class<?> a = commonClass;
Class<?> b = keys.get(i).get(k).getTypeInfo().getPrimitiveClass();
- commonClass = UDFRegistry.getCommonClass(a, b);
+ commonClass = FunctionRegistry.getCommonClass(a, b);
if (commonClass == null) {
throw new SemanticException("Cannot do equality join on different types: " + a.getClass() + " and " + b.getClass());
}
@@ -2693,7 +2692,7 @@
assert(childTypeInfo != null);
argumentClasses.add(childTypeInfo.getPrimitiveClass());
}
- Method udfMethod = UDFRegistry.getUDFMethod(udfName, false, argumentClasses);
+ Method udfMethod = FunctionRegistry.getUDFMethod(udfName, false, argumentClasses);
if (udfMethod == null) return null;
ArrayList<exprNodeDesc> ch = new ArrayList<exprNodeDesc>();
@@ -2713,10 +2712,10 @@
// must be implicit type conversion
Class<?> from = argumentClasses.get(i);
Class<?> to = pType;
- assert(UDFRegistry.implicitConvertable(from, to));
- Method m = UDFRegistry.getUDFMethod(to.getName(), true, from);
+ assert(FunctionRegistry.implicitConvertable(from, to));
+ Method m = FunctionRegistry.getUDFMethod(to.getName(), true, from);
assert(m != null);
- Class c = UDFRegistry.getUDFClass(to.getName());
+ Class<? extends UDF> c = FunctionRegistry.getUDFClass(to.getName());
assert(c != null);
// get the conversion method
@@ -2730,7 +2729,7 @@
exprNodeFuncDesc desc = new exprNodeFuncDesc(
TypeInfo.getPrimitiveTypeInfo(TypeInfo.generalizePrimitive(udfMethod.getReturnType())),
- UDFRegistry.getUDFClass(udfName),
+ FunctionRegistry.getUDFClass(udfName),
udfMethod, ch);
return desc;
}
@@ -2895,7 +2894,7 @@
desc = new exprNodeIndexDesc(t, children.get(0), children.get(1));
} else {
// other operators or functions
- Class<? extends UDF> udf = UDFRegistry.getUDFClass(funcText);
+ Class<? extends UDF> udf = FunctionRegistry.getUDFClass(funcText);
if (udf == null) {
throw new SemanticException(ErrorMsg.INVALID_FUNCTION.getMsg((CommonTree)expr.getChild(0)));
}
Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzerFactory.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzerFactory.java?rev=696736&r1=696735&r2=696736&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzerFactory.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzerFactory.java Thu Sep 18 10:37:59 2008
@@ -29,6 +29,7 @@
throw new RuntimeException ("Empty Syntax Tree");
} else {
switch (tree.getToken().getType()) {
+ case HiveParser.TOK_EXPLAIN: return new ExplainSemanticAnalyzer(conf);
case HiveParser.TOK_LOAD: return new LoadSemanticAnalyzer(conf);
case HiveParser.TOK_CREATETABLE:
case HiveParser.TOK_CREATEEXTTABLE:
Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeInfo.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeInfo.java?rev=696736&r1=696735&r2=696736&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeInfo.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeInfo.java Thu Sep 18 10:37:59 2008
@@ -232,7 +232,7 @@
public static Class<?> generalizePrimitive(Class<?> primitiveClass) {
- if (primitiveClass == Boolean.TYPE) primitiveClass = Boolean.class;
+ if (primitiveClass == Boolean.TYPE) primitiveClass = Boolean.class;
if (primitiveClass == Byte.TYPE) primitiveClass = Byte.class;
if (primitiveClass == Character.TYPE) primitiveClass = Character.class;
if (primitiveClass == Short.TYPE) primitiveClass = Short.class;
@@ -244,4 +244,8 @@
return primitiveClass;
}
+ public String getTypeString() {
+ // TODO: Change this to print out a better user visible string
+ return toString();
+ }
}
Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/DDLWork.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/DDLWork.java?rev=696736&r1=696735&r2=696736&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/DDLWork.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/DDLWork.java Thu Sep 18 10:37:59 2008
@@ -68,6 +68,7 @@
/**
* @return the createTblDesc
*/
+ @explain(displayName="Create Table Operator")
public createTableDesc getCreateTblDesc() {
return createTblDesc;
}
@@ -82,6 +83,7 @@
/**
* @return the dropTblDesc
*/
+ @explain(displayName="Drop Table Operator")
public dropTableDesc getDropTblDesc() {
return dropTblDesc;
}
@@ -96,6 +98,7 @@
/**
* @return the alterTblDesc
*/
+ @explain(displayName="Alter Table Operator")
public alterTableDesc getAlterTblDesc() {
return alterTblDesc;
}
@@ -110,6 +113,7 @@
/**
* @return the showTblsDesc
*/
+ @explain(displayName="Show Table Operator")
public showTablesDesc getShowTblsDesc() {
return showTblsDesc;
}
@@ -124,6 +128,7 @@
/**
* @return the descTblDesc
*/
+ @explain(displayName="Describe Table Operator")
public descTableDesc getDescTblDesc() {
return descTblDesc;
}
@@ -133,5 +138,6 @@
*/
public void setDescTblDesc(descTableDesc descTblDesc) {
this.descTblDesc = descTblDesc;
- }
+ }
+
}
Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/aggregationDesc.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/aggregationDesc.java?rev=696736&r1=696735&r2=696736&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/aggregationDesc.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/aggregationDesc.java Thu Sep 18 10:37:59 2008
@@ -18,6 +18,8 @@
package org.apache.hadoop.hive.ql.plan;
+import org.apache.hadoop.hive.ql.exec.FunctionInfo;
+import org.apache.hadoop.hive.ql.exec.FunctionRegistry;
import org.apache.hadoop.hive.ql.exec.UDAF;
public class aggregationDesc implements java.io.Serializable {
@@ -52,4 +54,27 @@
public void setDistinct(final boolean distinct) {
this.distinct = distinct;
}
+
+ @explain(displayName="expr")
+ public String getExprString() {
+ FunctionInfo fI = FunctionRegistry.getInfo(aggregationClass);
+ StringBuilder sb = new StringBuilder();
+ sb.append(fI.getDisplayName());
+ sb.append("(");
+ if (distinct) {
+ sb.append("DISTINCT ");
+ }
+ boolean first = true;
+ for(exprNodeDesc exp: parameters) {
+ if (!first) {
+ sb.append(", ");
+ }
+
+ sb.append(exp.getExprString());
+ first = false;
+ }
+ sb.append(")");
+
+ return sb.toString();
+ }
}
Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/alterTableDesc.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/alterTableDesc.java?rev=696736&r1=696735&r2=696736&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/alterTableDesc.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/alterTableDesc.java Thu Sep 18 10:37:59 2008
@@ -19,10 +19,13 @@
package org.apache.hadoop.hive.ql.plan;
import java.io.Serializable;
+import java.util.ArrayList;
import java.util.List;
import org.apache.hadoop.hive.metastore.api.FieldSchema;
+import org.apache.hadoop.hive.ql.exec.Utilities;
+@explain(displayName="Alter Table")
public class alterTableDesc extends ddlDesc implements Serializable
{
private static final long serialVersionUID = 1L;
@@ -56,6 +59,7 @@
/**
* @return the old name of the table
*/
+ @explain(displayName="old name")
public String getOldName() {
return oldName;
}
@@ -70,6 +74,7 @@
/**
* @return the newName
*/
+ @explain(displayName="new name")
public String getNewName() {
return newName;
}
@@ -88,6 +93,17 @@
return op;
}
+ @explain(displayName="type")
+ public String getAlterTableTypeString() {
+ switch(op) {
+ case RENAME:
+ return "rename";
+ case ADDCOLS:
+ return "add columns";
+ }
+
+ return "unknown";
+ }
/**
* @param op the op to set
*/
@@ -102,6 +118,10 @@
return newCols;
}
+ @explain(displayName="new columns")
+ public List<String> getNewColsString() {
+ return Utilities.getFieldSchemaString(getNewCols());
+ }
/**
* @param newCols the newCols to set
*/
Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/collectDesc.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/collectDesc.java?rev=696736&r1=696735&r2=696736&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/collectDesc.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/collectDesc.java Thu Sep 18 10:37:59 2008
@@ -20,6 +20,7 @@
import java.io.Serializable;
+@explain(displayName="Collect")
public class collectDesc implements Serializable {
private static final long serialVersionUID = 1L;
Integer bufferSize;
Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/copyWork.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/copyWork.java?rev=696736&r1=696735&r2=696736&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/copyWork.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/copyWork.java Thu Sep 18 10:37:59 2008
@@ -20,7 +20,7 @@
import java.io.Serializable;
-
+@explain(displayName="Copy")
public class copyWork implements Serializable {
private static final long serialVersionUID = 1L;
private String fromPath;
@@ -33,12 +33,16 @@
this.fromPath = fromPath;
this.toPath = toPath;
}
+
+ @explain(displayName="source")
public String getFromPath() {
return this.fromPath;
}
public void setFromPath(final String fromPath) {
this.fromPath = fromPath;
}
+
+ @explain(displayName="destination")
public String getToPath() {
return this.toPath;
}