You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by na...@apache.org on 2012/01/29 12:45:47 UTC
svn commit: r1237253 - in /hive/trunk/ql/src:
java/org/apache/hadoop/hive/ql/optimizer/
java/org/apache/hadoop/hive/ql/optimizer/unionproc/
test/queries/clientpositive/ test/results/clientpositive/
Author: namit
Date: Sun Jan 29 11:45:47 2012
New Revision: 1237253
URL: http://svn.apache.org/viewvc?rev=1237253&view=rev
Log:
HIVE-2755 union follwowed by union_subq does not work if the subquery union
has reducers (He Yongqiang via namit)
Added:
hive/trunk/ql/src/test/queries/clientpositive/union28.q
hive/trunk/ql/src/test/queries/clientpositive/union29.q
hive/trunk/ql/src/test/queries/clientpositive/union30.q
hive/trunk/ql/src/test/results/clientpositive/union28.q.out
hive/trunk/ql/src/test/results/clientpositive/union29.q.out
hive/trunk/ql/src/test/results/clientpositive/union30.q.out
Modified:
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRFileSink1.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRUnion1.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/unionproc/UnionProcContext.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/unionproc/UnionProcFactory.java
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRFileSink1.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRFileSink1.java?rev=1237253&r1=1237252&r2=1237253&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRFileSink1.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRFileSink1.java Sun Jan 29 11:45:47 2012
@@ -653,11 +653,19 @@ public class GenMRFileSink1 implements N
seenOps.add(currTopOp);
GenMapRedUtils.setTaskPlan(currAliasId, currTopOp,
(MapredWork) mapTask.getWork(), false, ctx);
+ } else {
+ UnionOperator currUnionOp = ctx.getCurrUnionOp();
+ if (currUnionOp != null) {
+ opTaskMap.put(null, currTask);
+ ctx.setCurrTopOp(null);
+ GenMapRedUtils.initUnionPlan(ctx, currTask, false);
+ return dest;
+ }
}
// mapTask and currTask should be merged by and join/union operator
// (e.g., GenMRUnion1j) which has multiple topOps.
- assert mapTask == currTask : "mapTask.id = " + mapTask.getId()
- + "; currTask.id = " + currTask.getId();
+ // assert mapTask == currTask : "mapTask.id = " + mapTask.getId()
+ // + "; currTask.id = " + currTask.getId();
}
return dest;
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRUnion1.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRUnion1.java?rev=1237253&r1=1237252&r2=1237253&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRUnion1.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRUnion1.java Sun Jan 29 11:45:47 2012
@@ -20,7 +20,6 @@ package org.apache.hadoop.hive.ql.optimi
import java.io.Serializable;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Stack;
@@ -68,12 +67,17 @@ public class GenMRUnion1 implements Node
*/
private Object processMapOnlyUnion(UnionOperator union, Stack<Node> stack,
GenMRProcContext ctx, UnionProcContext uCtx) throws SemanticException {
+
// merge currTask from multiple topOps
GenMRUnionCtx uCtxTask = ctx.getUnionTask(union);
if (uCtxTask != null) {
// get task associated with this union
Task<? extends Serializable> uTask = ctx.getUnionTask(union).getUTask();
if (uTask != null) {
+ if (ctx.getCurrTask() != null && ctx.getCurrTask() != uTask) {
+ // if ctx.getCurrTask() is in rootTasks, should be removed
+ ctx.getRootTasks().remove(ctx.getCurrTask());
+ }
ctx.setCurrTask(uTask);
}
}
@@ -276,8 +280,8 @@ public class GenMRUnion1 implements Node
}
// Copy into the current union task plan if
- if (uPrsCtx.getMapOnlySubq(pos) && uPrsCtx.getRootTask(pos)
- && !uPrsCtx.getMapJoinSubq(pos)) {
+ if (uPrsCtx.getMapOnlySubq(pos)
+ && !uPrsCtx.getMapJoinSubq(pos) && uPrsCtx.getRootTask(pos)) {
processSubQueryUnionMerge(ctx, uCtxTask, union, stack);
}
// If it a map-reduce job, create a temporary file
@@ -296,6 +300,7 @@ public class GenMRUnion1 implements Node
//the currAliasId and CurrTopOp is not valid any more
ctx.setCurrAliasId(null);
ctx.setCurrTopOp(null);
+ ctx.getOpTaskMap().put(null, uTask);
}
ctx.setCurrTask(uTask);
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/unionproc/UnionProcContext.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/unionproc/UnionProcContext.java?rev=1237253&r1=1237252&r2=1237253&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/unionproc/UnionProcContext.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/unionproc/UnionProcContext.java Sun Jan 29 11:45:47 2012
@@ -36,6 +36,7 @@ public class UnionProcContext implements
*/
public static class UnionParseContext {
private final transient boolean[] mapOnlySubq;
+ private final transient boolean[] mapOnlySubqSet;
private final transient boolean[] rootTask;
private final transient boolean[] mapJoinSubq;
@@ -47,6 +48,7 @@ public class UnionProcContext implements
mapOnlySubq = new boolean[numInputs];
rootTask = new boolean[numInputs];
mapJoinSubq = new boolean[numInputs];
+ mapOnlySubqSet = new boolean[numInputs];
}
public boolean getMapOnlySubq(int pos) {
@@ -55,6 +57,7 @@ public class UnionProcContext implements
public void setMapOnlySubq(int pos, boolean mapOnlySubq) {
this.mapOnlySubq[pos] = mapOnlySubq;
+ this.mapOnlySubqSet[pos] = true;
}
public boolean getMapJoinSubq(int pos) {
@@ -99,6 +102,17 @@ public class UnionProcContext implements
return true;
}
+ public boolean allMapOnlySubQSet() {
+ if (mapOnlySubqSet != null) {
+ for (boolean mapOnlySet : mapOnlySubqSet) {
+ if (!mapOnlySet) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
}
// the subqueries are map-only jobs
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/unionproc/UnionProcFactory.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/unionproc/UnionProcFactory.java?rev=1237253&r1=1237252&r2=1237253&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/unionproc/UnionProcFactory.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/unionproc/UnionProcFactory.java Sun Jan 29 11:45:47 2012
@@ -142,8 +142,30 @@ public final class UnionProcFactory {
if (uCtx == null) {
uCtx = new UnionParseContext(union.getConf().getNumInputs());
}
+ int start = stack.size() - 2;
+ UnionOperator parentUnionOperator = null;
+ while (start >= 0) {
+ Operator<? extends Serializable> parent =
+ (Operator<? extends Serializable>) stack.get(start);
+ if (parent instanceof UnionOperator) {
+ parentUnionOperator = (UnionOperator) parent;
+ break;
+ }
+ start--;
+ }
+
+ // default to false
+ boolean mapOnly = false;
+ if (parentUnionOperator != null) {
+ UnionParseContext parentUCtx =
+ ctx.getUnionParseContext(parentUnionOperator);
+ if (parentUCtx != null && parentUCtx.allMapOnlySubQSet()) {
+ mapOnly = parentUCtx.allMapOnlySubQ();
+ }
+ }
+
+ uCtx.setMapOnlySubq(pos, mapOnly);
- uCtx.setMapOnlySubq(pos, true);
uCtx.setRootTask(pos, false);
ctx.setUnionParseContext(union, uCtx);
return null;
Added: hive/trunk/ql/src/test/queries/clientpositive/union28.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientpositive/union28.q?rev=1237253&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientpositive/union28.q (added)
+++ hive/trunk/ql/src/test/queries/clientpositive/union28.q Sun Jan 29 11:45:47 2012
@@ -0,0 +1,30 @@
+create table union_subq_union(key int, value string);
+
+explain
+insert overwrite table union_subq_union
+select * from (
+ select key, value from src
+ union all
+ select key, value from
+ (
+ select key, value, count(1) from src group by key, value
+ union all
+ select key, value, count(1) from src group by key, value
+ ) subq
+) a
+;
+
+insert overwrite table union_subq_union
+select * from (
+ select key, value from src
+ union all
+ select key, value from
+ (
+ select key, value, count(1) from src group by key, value
+ union all
+ select key, value, count(1) from src group by key, value
+ ) subq
+) a
+;
+
+select * from union_subq_union order by key, value limit 20;
Added: hive/trunk/ql/src/test/queries/clientpositive/union29.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientpositive/union29.q?rev=1237253&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientpositive/union29.q (added)
+++ hive/trunk/ql/src/test/queries/clientpositive/union29.q Sun Jan 29 11:45:47 2012
@@ -0,0 +1,30 @@
+create table union_subq_union(key int, value string);
+
+explain
+insert overwrite table union_subq_union
+select * from (
+ select key, value from src
+ union all
+ select key, value from
+ (
+ select key, value from src
+ union all
+ select key, value from src
+ ) subq
+) a
+;
+
+insert overwrite table union_subq_union
+select * from (
+ select key, value from src
+ union all
+ select key, value from
+ (
+ select key, value from src
+ union all
+ select key, value from src
+ ) subq
+) a
+;
+
+select * from union_subq_union order by key, value limit 20;
Added: hive/trunk/ql/src/test/queries/clientpositive/union30.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientpositive/union30.q?rev=1237253&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientpositive/union30.q (added)
+++ hive/trunk/ql/src/test/queries/clientpositive/union30.q Sun Jan 29 11:45:47 2012
@@ -0,0 +1,44 @@
+create table union_subq_union(key int, value string);
+
+explain
+insert overwrite table union_subq_union
+select * from (
+
+select * from (
+ select key, value from src
+ union all
+ select key, value from
+ (
+ select key, value, count(1) from src group by key, value
+ union all
+ select key, value, count(1) from src group by key, value
+ ) subq
+) a
+
+union all
+
+select key, value from src
+) aa
+;
+
+insert overwrite table union_subq_union
+select * from (
+
+select * from (
+ select key, value from src
+ union all
+ select key, value from
+ (
+ select key, value, count(1) from src group by key, value
+ union all
+ select key, value, count(1) from src group by key, value
+ ) subq
+) a
+
+union all
+
+select key, value from src
+) aa
+;
+
+select * from union_subq_union order by key, value limit 20;
Added: hive/trunk/ql/src/test/results/clientpositive/union28.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/union28.q.out?rev=1237253&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientpositive/union28.q.out (added)
+++ hive/trunk/ql/src/test/results/clientpositive/union28.q.out Sun Jan 29 11:45:47 2012
@@ -0,0 +1,376 @@
+PREHOOK: query: create table union_subq_union(key int, value string)
+PREHOOK: type: CREATETABLE
+POSTHOOK: query: create table union_subq_union(key int, value string)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: default@union_subq_union
+PREHOOK: query: explain
+insert overwrite table union_subq_union
+select * from (
+ select key, value from src
+ union all
+ select key, value from
+ (
+ select key, value, count(1) from src group by key, value
+ union all
+ select key, value, count(1) from src group by key, value
+ ) subq
+) a
+PREHOOK: type: QUERY
+POSTHOOK: query: explain
+insert overwrite table union_subq_union
+select * from (
+ select key, value from src
+ union all
+ select key, value from
+ (
+ select key, value, count(1) from src group by key, value
+ union all
+ select key, value, count(1) from src group by key, value
+ ) subq
+) a
+POSTHOOK: type: QUERY
+ABSTRACT SYNTAX TREE:
+ (TOK_QUERY (TOK_FROM (TOK_SUBQUERY (TOK_UNION (TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME src))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_TABLE_OR_COL key)) (TOK_SELEXPR (TOK_TABLE_OR_COL value))))) (TOK_QUERY (TOK_FROM (TOK_SUBQUERY (TOK_UNION (TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME src))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_TABLE_OR_COL key)) (TOK_SELEXPR (TOK_TABLE_OR_COL value)) (TOK_SELEXPR (TOK_FUNCTION count 1))) (TOK_GROUPBY (TOK_TABLE_OR_COL key) (TOK_TABLE_OR_COL value)))) (TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME src))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_TABLE_OR_COL key)) (TOK_SELEXPR (TOK_TABLE_OR_COL value)) (TOK_SELEXPR (TOK_FUNCTION count 1))) (TOK_GROUPBY (TOK_TABLE_OR_COL key) (TOK_TABLE_OR_COL value))))) subq)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_TABLE_OR_COL ke
y)) (TOK_SELEXPR (TOK_TABLE_OR_COL value)))))) a)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB (TOK_TABNAME union_subq_union))) (TOK_SELECT (TOK_SELEXPR TOK_ALLCOLREF))))
+
+STAGE DEPENDENCIES:
+ Stage-7 is a root stage
+ Stage-8 depends on stages: Stage-7, Stage-9
+ Stage-2 depends on stages: Stage-8
+ Stage-6 depends on stages: Stage-2 , consists of Stage-5, Stage-4
+ Stage-5
+ Stage-0 depends on stages: Stage-5, Stage-4
+ Stage-3 depends on stages: Stage-0
+ Stage-4
+ Stage-9 is a root stage
+
+STAGE PLANS:
+ Stage: Stage-7
+ Map Reduce
+ Alias -> Map Operator Tree:
+ null-subquery2:a-subquery2-subquery1:subq-subquery1:src
+ TableScan
+ alias: src
+ Select Operator
+ expressions:
+ expr: key
+ type: string
+ expr: value
+ type: string
+ outputColumnNames: key, value
+ Group By Operator
+ aggregations:
+ expr: count(1)
+ bucketGroup: false
+ keys:
+ expr: key
+ type: string
+ expr: value
+ type: string
+ mode: hash
+ outputColumnNames: _col0, _col1, _col2
+ Reduce Output Operator
+ key expressions:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ sort order: ++
+ Map-reduce partition columns:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ tag: -1
+ value expressions:
+ expr: _col2
+ type: bigint
+ Reduce Operator Tree:
+ Group By Operator
+ aggregations:
+ expr: count(VALUE._col0)
+ bucketGroup: false
+ keys:
+ expr: KEY._col0
+ type: string
+ expr: KEY._col1
+ type: string
+ mode: mergepartial
+ outputColumnNames: _col0, _col1, _col2
+ Select Operator
+ expressions:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ expr: _col2
+ type: bigint
+ outputColumnNames: _col0, _col1, _col2
+ File Output Operator
+ compressed: false
+ GlobalTableId: 0
+ table:
+ input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+
+ Stage: Stage-8
+ Map Reduce
+ Alias -> Map Operator Tree:
+#### A masked pattern was here ####
+ TableScan
+ Union
+ Select Operator
+ expressions:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ outputColumnNames: _col0, _col1
+ File Output Operator
+ compressed: false
+ GlobalTableId: 0
+ table:
+ input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+#### A masked pattern was here ####
+ TableScan
+ Union
+ Select Operator
+ expressions:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ outputColumnNames: _col0, _col1
+ File Output Operator
+ compressed: false
+ GlobalTableId: 0
+ table:
+ input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+
+ Stage: Stage-2
+ Map Reduce
+ Alias -> Map Operator Tree:
+#### A masked pattern was here ####
+ TableScan
+ Union
+ Select Operator
+ expressions:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ outputColumnNames: _col0, _col1
+ Select Operator
+ expressions:
+ expr: UDFToInteger(_col0)
+ type: int
+ expr: _col1
+ type: string
+ outputColumnNames: _col0, _col1
+ File Output Operator
+ compressed: false
+ GlobalTableId: 1
+ table:
+ input format: org.apache.hadoop.mapred.TextInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+ serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+ name: default.union_subq_union
+ null-subquery1:a-subquery1:src
+ TableScan
+ alias: src
+ Select Operator
+ expressions:
+ expr: key
+ type: string
+ expr: value
+ type: string
+ outputColumnNames: _col0, _col1
+ Union
+ Select Operator
+ expressions:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ outputColumnNames: _col0, _col1
+ Select Operator
+ expressions:
+ expr: UDFToInteger(_col0)
+ type: int
+ expr: _col1
+ type: string
+ outputColumnNames: _col0, _col1
+ File Output Operator
+ compressed: false
+ GlobalTableId: 1
+ table:
+ input format: org.apache.hadoop.mapred.TextInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+ serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+ name: default.union_subq_union
+
+ Stage: Stage-6
+ Conditional Operator
+
+ Stage: Stage-5
+ Move Operator
+ files:
+ hdfs directory: true
+#### A masked pattern was here ####
+
+ Stage: Stage-0
+ Move Operator
+ tables:
+ replace: true
+ table:
+ input format: org.apache.hadoop.mapred.TextInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+ serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+ name: default.union_subq_union
+
+ Stage: Stage-3
+ Stats-Aggr Operator
+
+ Stage: Stage-4
+ Map Reduce
+ Alias -> Map Operator Tree:
+#### A masked pattern was here ####
+ File Output Operator
+ compressed: false
+ GlobalTableId: 0
+ table:
+ input format: org.apache.hadoop.mapred.TextInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+ serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+ name: default.union_subq_union
+
+ Stage: Stage-9
+ Map Reduce
+ Alias -> Map Operator Tree:
+ null-subquery2:a-subquery2-subquery2:subq-subquery2:src
+ TableScan
+ alias: src
+ Select Operator
+ expressions:
+ expr: key
+ type: string
+ expr: value
+ type: string
+ outputColumnNames: key, value
+ Group By Operator
+ aggregations:
+ expr: count(1)
+ bucketGroup: false
+ keys:
+ expr: key
+ type: string
+ expr: value
+ type: string
+ mode: hash
+ outputColumnNames: _col0, _col1, _col2
+ Reduce Output Operator
+ key expressions:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ sort order: ++
+ Map-reduce partition columns:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ tag: -1
+ value expressions:
+ expr: _col2
+ type: bigint
+ Reduce Operator Tree:
+ Group By Operator
+ aggregations:
+ expr: count(VALUE._col0)
+ bucketGroup: false
+ keys:
+ expr: KEY._col0
+ type: string
+ expr: KEY._col1
+ type: string
+ mode: mergepartial
+ outputColumnNames: _col0, _col1, _col2
+ Select Operator
+ expressions:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ expr: _col2
+ type: bigint
+ outputColumnNames: _col0, _col1, _col2
+ File Output Operator
+ compressed: false
+ GlobalTableId: 0
+ table:
+ input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+
+
+PREHOOK: query: insert overwrite table union_subq_union
+select * from (
+ select key, value from src
+ union all
+ select key, value from
+ (
+ select key, value, count(1) from src group by key, value
+ union all
+ select key, value, count(1) from src group by key, value
+ ) subq
+) a
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: default@union_subq_union
+POSTHOOK: query: insert overwrite table union_subq_union
+select * from (
+ select key, value from src
+ union all
+ select key, value from
+ (
+ select key, value, count(1) from src group by key, value
+ union all
+ select key, value, count(1) from src group by key, value
+ ) subq
+) a
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: default@union_subq_union
+POSTHOOK: Lineage: union_subq_union.key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), (src)src.FieldSchema(name:key, type:string, comment:default), (src)src.FieldSchema(name:key, type:string, comment:default), ]
+POSTHOOK: Lineage: union_subq_union.value EXPRESSION [(src)src.FieldSchema(name:value, type:string, comment:default), (src)src.FieldSchema(name:value, type:string, comment:default), (src)src.FieldSchema(name:value, type:string, comment:default), ]
+PREHOOK: query: select * from union_subq_union order by key, value limit 20
+PREHOOK: type: QUERY
+PREHOOK: Input: default@union_subq_union
+#### A masked pattern was here ####
+POSTHOOK: query: select * from union_subq_union order by key, value limit 20
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@union_subq_union
+#### A masked pattern was here ####
+POSTHOOK: Lineage: union_subq_union.key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), (src)src.FieldSchema(name:key, type:string, comment:default), (src)src.FieldSchema(name:key, type:string, comment:default), ]
+POSTHOOK: Lineage: union_subq_union.value EXPRESSION [(src)src.FieldSchema(name:value, type:string, comment:default), (src)src.FieldSchema(name:value, type:string, comment:default), (src)src.FieldSchema(name:value, type:string, comment:default), ]
+0 val_0
+0 val_0
+0 val_0
+0 val_0
+0 val_0
+2 val_2
+2 val_2
+2 val_2
+4 val_4
+4 val_4
+4 val_4
+5 val_5
+5 val_5
+5 val_5
+5 val_5
+5 val_5
+8 val_8
+8 val_8
+8 val_8
+9 val_9
Added: hive/trunk/ql/src/test/results/clientpositive/union29.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/union29.q.out?rev=1237253&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientpositive/union29.q.out (added)
+++ hive/trunk/ql/src/test/results/clientpositive/union29.q.out Sun Jan 29 11:45:47 2012
@@ -0,0 +1,258 @@
+PREHOOK: query: create table union_subq_union(key int, value string)
+PREHOOK: type: CREATETABLE
+POSTHOOK: query: create table union_subq_union(key int, value string)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: default@union_subq_union
+PREHOOK: query: explain
+insert overwrite table union_subq_union
+select * from (
+ select key, value from src
+ union all
+ select key, value from
+ (
+ select key, value from src
+ union all
+ select key, value from src
+ ) subq
+) a
+PREHOOK: type: QUERY
+POSTHOOK: query: explain
+insert overwrite table union_subq_union
+select * from (
+ select key, value from src
+ union all
+ select key, value from
+ (
+ select key, value from src
+ union all
+ select key, value from src
+ ) subq
+) a
+POSTHOOK: type: QUERY
+ABSTRACT SYNTAX TREE:
+ (TOK_QUERY (TOK_FROM (TOK_SUBQUERY (TOK_UNION (TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME src))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_TABLE_OR_COL key)) (TOK_SELEXPR (TOK_TABLE_OR_COL value))))) (TOK_QUERY (TOK_FROM (TOK_SUBQUERY (TOK_UNION (TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME src))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_TABLE_OR_COL key)) (TOK_SELEXPR (TOK_TABLE_OR_COL value))))) (TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME src))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_TABLE_OR_COL key)) (TOK_SELEXPR (TOK_TABLE_OR_COL value)))))) subq)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_TABLE_OR_COL key)) (TOK_SELEXPR (TOK_TABLE_OR_COL value)))))) a)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB (TOK_TABNAME union_subq_union))) (TOK_SELECT (TOK_SELEXPR TOK_ALLCOLREF))))
+
+STAGE DEPENDENCIES:
+ Stage-1 is a root stage
+ Stage-5 depends on stages: Stage-1 , consists of Stage-4, Stage-3
+ Stage-4
+ Stage-0 depends on stages: Stage-4, Stage-3
+ Stage-2 depends on stages: Stage-0
+ Stage-3
+
+STAGE PLANS:
+ Stage: Stage-1
+ Map Reduce
+ Alias -> Map Operator Tree:
+ null-subquery1:a-subquery1:src
+ TableScan
+ alias: src
+ Select Operator
+ expressions:
+ expr: key
+ type: string
+ expr: value
+ type: string
+ outputColumnNames: _col0, _col1
+ Union
+ Select Operator
+ expressions:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ outputColumnNames: _col0, _col1
+ Select Operator
+ expressions:
+ expr: UDFToInteger(_col0)
+ type: int
+ expr: _col1
+ type: string
+ outputColumnNames: _col0, _col1
+ File Output Operator
+ compressed: false
+ GlobalTableId: 1
+ table:
+ input format: org.apache.hadoop.mapred.TextInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+ serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+ name: default.union_subq_union
+ null-subquery2:a-subquery2-subquery1:subq-subquery1:src
+ TableScan
+ alias: src
+ Select Operator
+ expressions:
+ expr: key
+ type: string
+ expr: value
+ type: string
+ outputColumnNames: _col0, _col1
+ Union
+ Select Operator
+ expressions:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ outputColumnNames: _col0, _col1
+ Union
+ Select Operator
+ expressions:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ outputColumnNames: _col0, _col1
+ Select Operator
+ expressions:
+ expr: UDFToInteger(_col0)
+ type: int
+ expr: _col1
+ type: string
+ outputColumnNames: _col0, _col1
+ File Output Operator
+ compressed: false
+ GlobalTableId: 1
+ table:
+ input format: org.apache.hadoop.mapred.TextInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+ serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+ name: default.union_subq_union
+ null-subquery2:a-subquery2-subquery2:subq-subquery2:src
+ TableScan
+ alias: src
+ Select Operator
+ expressions:
+ expr: key
+ type: string
+ expr: value
+ type: string
+ outputColumnNames: _col0, _col1
+ Union
+ Select Operator
+ expressions:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ outputColumnNames: _col0, _col1
+ Union
+ Select Operator
+ expressions:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ outputColumnNames: _col0, _col1
+ Select Operator
+ expressions:
+ expr: UDFToInteger(_col0)
+ type: int
+ expr: _col1
+ type: string
+ outputColumnNames: _col0, _col1
+ File Output Operator
+ compressed: false
+ GlobalTableId: 1
+ table:
+ input format: org.apache.hadoop.mapred.TextInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+ serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+ name: default.union_subq_union
+
+ Stage: Stage-5
+ Conditional Operator
+
+ Stage: Stage-4
+ Move Operator
+ files:
+ hdfs directory: true
+#### A masked pattern was here ####
+
+ Stage: Stage-0
+ Move Operator
+ tables:
+ replace: true
+ table:
+ input format: org.apache.hadoop.mapred.TextInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+ serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+ name: default.union_subq_union
+
+ Stage: Stage-2
+ Stats-Aggr Operator
+
+ Stage: Stage-3
+ Map Reduce
+ Alias -> Map Operator Tree:
+#### A masked pattern was here ####
+ File Output Operator
+ compressed: false
+ GlobalTableId: 0
+ table:
+ input format: org.apache.hadoop.mapred.TextInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+ serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+ name: default.union_subq_union
+
+
+PREHOOK: query: insert overwrite table union_subq_union
+select * from (
+ select key, value from src
+ union all
+ select key, value from
+ (
+ select key, value from src
+ union all
+ select key, value from src
+ ) subq
+) a
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: default@union_subq_union
+POSTHOOK: query: insert overwrite table union_subq_union
+select * from (
+ select key, value from src
+ union all
+ select key, value from
+ (
+ select key, value from src
+ union all
+ select key, value from src
+ ) subq
+) a
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: default@union_subq_union
+POSTHOOK: Lineage: union_subq_union.key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), (src)src.FieldSchema(name:key, type:string, comment:default), (src)src.FieldSchema(name:key, type:string, comment:default), ]
+POSTHOOK: Lineage: union_subq_union.value EXPRESSION [(src)src.FieldSchema(name:value, type:string, comment:default), (src)src.FieldSchema(name:value, type:string, comment:default), (src)src.FieldSchema(name:value, type:string, comment:default), ]
+PREHOOK: query: select * from union_subq_union order by key, value limit 20
+PREHOOK: type: QUERY
+PREHOOK: Input: default@union_subq_union
+#### A masked pattern was here ####
+POSTHOOK: query: select * from union_subq_union order by key, value limit 20
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@union_subq_union
+#### A masked pattern was here ####
+POSTHOOK: Lineage: union_subq_union.key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), (src)src.FieldSchema(name:key, type:string, comment:default), (src)src.FieldSchema(name:key, type:string, comment:default), ]
+POSTHOOK: Lineage: union_subq_union.value EXPRESSION [(src)src.FieldSchema(name:value, type:string, comment:default), (src)src.FieldSchema(name:value, type:string, comment:default), (src)src.FieldSchema(name:value, type:string, comment:default), ]
+0 val_0
+0 val_0
+0 val_0
+0 val_0
+0 val_0
+0 val_0
+0 val_0
+0 val_0
+0 val_0
+2 val_2
+2 val_2
+2 val_2
+4 val_4
+4 val_4
+4 val_4
+5 val_5
+5 val_5
+5 val_5
+5 val_5
+5 val_5
Added: hive/trunk/ql/src/test/results/clientpositive/union30.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/union30.q.out?rev=1237253&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientpositive/union30.q.out (added)
+++ hive/trunk/ql/src/test/results/clientpositive/union30.q.out Sun Jan 29 11:45:47 2012
@@ -0,0 +1,449 @@
+PREHOOK: query: create table union_subq_union(key int, value string)
+PREHOOK: type: CREATETABLE
+POSTHOOK: query: create table union_subq_union(key int, value string)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: default@union_subq_union
+PREHOOK: query: explain
+insert overwrite table union_subq_union
+select * from (
+
+select * from (
+ select key, value from src
+ union all
+ select key, value from
+ (
+ select key, value, count(1) from src group by key, value
+ union all
+ select key, value, count(1) from src group by key, value
+ ) subq
+) a
+
+union all
+
+select key, value from src
+) aa
+PREHOOK: type: QUERY
+POSTHOOK: query: explain
+insert overwrite table union_subq_union
+select * from (
+
+select * from (
+ select key, value from src
+ union all
+ select key, value from
+ (
+ select key, value, count(1) from src group by key, value
+ union all
+ select key, value, count(1) from src group by key, value
+ ) subq
+) a
+
+union all
+
+select key, value from src
+) aa
+POSTHOOK: type: QUERY
+ABSTRACT SYNTAX TREE:
+ (TOK_QUERY (TOK_FROM (TOK_SUBQUERY (TOK_UNION (TOK_QUERY (TOK_FROM (TOK_SUBQUERY (TOK_UNION (TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME src))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_TABLE_OR_COL key)) (TOK_SELEXPR (TOK_TABLE_OR_COL value))))) (TOK_QUERY (TOK_FROM (TOK_SUBQUERY (TOK_UNION (TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME src))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_TABLE_OR_COL key)) (TOK_SELEXPR (TOK_TABLE_OR_COL value)) (TOK_SELEXPR (TOK_FUNCTION count 1))) (TOK_GROUPBY (TOK_TABLE_OR_COL key) (TOK_TABLE_OR_COL value)))) (TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME src))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_TABLE_OR_COL key)) (TOK_SELEXPR (TOK_TABLE_OR_COL value)) (TOK_SELEXPR (TOK_FUNCTION count 1))) (TOK_GROUPBY (TOK_TABLE_OR_COL key) (TOK_TABLE_OR_COL value))))) subq)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE))
(TOK_SELECT (TOK_SELEXPR (TOK_TABLE_OR_COL key)) (TOK_SELEXPR (TOK_TABLE_OR_COL value)))))) a)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR TOK_ALLCOLREF)))) (TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME src))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_TABLE_OR_COL key)) (TOK_SELEXPR (TOK_TABLE_OR_COL value)))))) aa)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB (TOK_TABNAME union_subq_union))) (TOK_SELECT (TOK_SELEXPR TOK_ALLCOLREF))))
+
+STAGE DEPENDENCIES:
+ Stage-1 is a root stage
+ Stage-2 depends on stages: Stage-1, Stage-9
+ Stage-3 depends on stages: Stage-2
+ Stage-4 depends on stages: Stage-3
+ Stage-8 depends on stages: Stage-4 , consists of Stage-7, Stage-6
+ Stage-7
+ Stage-0 depends on stages: Stage-7, Stage-6
+ Stage-5 depends on stages: Stage-0
+ Stage-6
+ Stage-9 is a root stage
+
+STAGE PLANS:
+ Stage: Stage-1
+ Map Reduce
+ Alias -> Map Operator Tree:
+ null-subquery1:aa-subquery1-subquery2:a-subquery2-subquery1:subq-subquery1:src
+ TableScan
+ alias: src
+ Select Operator
+ expressions:
+ expr: key
+ type: string
+ expr: value
+ type: string
+ outputColumnNames: key, value
+ Group By Operator
+ aggregations:
+ expr: count(1)
+ bucketGroup: false
+ keys:
+ expr: key
+ type: string
+ expr: value
+ type: string
+ mode: hash
+ outputColumnNames: _col0, _col1, _col2
+ Reduce Output Operator
+ key expressions:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ sort order: ++
+ Map-reduce partition columns:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ tag: -1
+ value expressions:
+ expr: _col2
+ type: bigint
+ Reduce Operator Tree:
+ Group By Operator
+ aggregations:
+ expr: count(VALUE._col0)
+ bucketGroup: false
+ keys:
+ expr: KEY._col0
+ type: string
+ expr: KEY._col1
+ type: string
+ mode: mergepartial
+ outputColumnNames: _col0, _col1, _col2
+ Select Operator
+ expressions:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ expr: _col2
+ type: bigint
+ outputColumnNames: _col0, _col1, _col2
+ File Output Operator
+ compressed: false
+ GlobalTableId: 0
+ table:
+ input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+
+ Stage: Stage-2
+ Map Reduce
+ Alias -> Map Operator Tree:
+#### A masked pattern was here ####
+ TableScan
+ Union
+ Select Operator
+ expressions:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ outputColumnNames: _col0, _col1
+ File Output Operator
+ compressed: false
+ GlobalTableId: 0
+ table:
+ input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+#### A masked pattern was here ####
+ TableScan
+ Union
+ Select Operator
+ expressions:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ outputColumnNames: _col0, _col1
+ File Output Operator
+ compressed: false
+ GlobalTableId: 0
+ table:
+ input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+
+ Stage: Stage-3
+ Map Reduce
+ Alias -> Map Operator Tree:
+#### A masked pattern was here ####
+ TableScan
+ Union
+ Select Operator
+ expressions:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ outputColumnNames: _col0, _col1
+ File Output Operator
+ compressed: false
+ GlobalTableId: 0
+ table:
+ input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+ null-subquery1:aa-subquery1-subquery1:a-subquery1:src
+ TableScan
+ alias: src
+ Select Operator
+ expressions:
+ expr: key
+ type: string
+ expr: value
+ type: string
+ outputColumnNames: _col0, _col1
+ Union
+ Select Operator
+ expressions:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ outputColumnNames: _col0, _col1
+ File Output Operator
+ compressed: false
+ GlobalTableId: 0
+ table:
+ input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+
+ Stage: Stage-4
+ Map Reduce
+ Alias -> Map Operator Tree:
+#### A masked pattern was here ####
+ TableScan
+ Union
+ Select Operator
+ expressions:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ outputColumnNames: _col0, _col1
+ Select Operator
+ expressions:
+ expr: UDFToInteger(_col0)
+ type: int
+ expr: _col1
+ type: string
+ outputColumnNames: _col0, _col1
+ File Output Operator
+ compressed: false
+ GlobalTableId: 1
+ table:
+ input format: org.apache.hadoop.mapred.TextInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+ serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+ name: default.union_subq_union
+ null-subquery2:aa-subquery2:src
+ TableScan
+ alias: src
+ Select Operator
+ expressions:
+ expr: key
+ type: string
+ expr: value
+ type: string
+ outputColumnNames: _col0, _col1
+ Union
+ Select Operator
+ expressions:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ outputColumnNames: _col0, _col1
+ Select Operator
+ expressions:
+ expr: UDFToInteger(_col0)
+ type: int
+ expr: _col1
+ type: string
+ outputColumnNames: _col0, _col1
+ File Output Operator
+ compressed: false
+ GlobalTableId: 1
+ table:
+ input format: org.apache.hadoop.mapred.TextInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+ serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+ name: default.union_subq_union
+
+ Stage: Stage-8
+ Conditional Operator
+
+ Stage: Stage-7
+ Move Operator
+ files:
+ hdfs directory: true
+#### A masked pattern was here ####
+
+ Stage: Stage-0
+ Move Operator
+ tables:
+ replace: true
+ table:
+ input format: org.apache.hadoop.mapred.TextInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+ serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+ name: default.union_subq_union
+
+ Stage: Stage-5
+ Stats-Aggr Operator
+
+ Stage: Stage-6
+ Map Reduce
+ Alias -> Map Operator Tree:
+#### A masked pattern was here ####
+ File Output Operator
+ compressed: false
+ GlobalTableId: 0
+ table:
+ input format: org.apache.hadoop.mapred.TextInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+ serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+ name: default.union_subq_union
+
+ Stage: Stage-9
+ Map Reduce
+ Alias -> Map Operator Tree:
+ null-subquery1:aa-subquery1-subquery2:a-subquery2-subquery2:subq-subquery2:src
+ TableScan
+ alias: src
+ Select Operator
+ expressions:
+ expr: key
+ type: string
+ expr: value
+ type: string
+ outputColumnNames: key, value
+ Group By Operator
+ aggregations:
+ expr: count(1)
+ bucketGroup: false
+ keys:
+ expr: key
+ type: string
+ expr: value
+ type: string
+ mode: hash
+ outputColumnNames: _col0, _col1, _col2
+ Reduce Output Operator
+ key expressions:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ sort order: ++
+ Map-reduce partition columns:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ tag: -1
+ value expressions:
+ expr: _col2
+ type: bigint
+ Reduce Operator Tree:
+ Group By Operator
+ aggregations:
+ expr: count(VALUE._col0)
+ bucketGroup: false
+ keys:
+ expr: KEY._col0
+ type: string
+ expr: KEY._col1
+ type: string
+ mode: mergepartial
+ outputColumnNames: _col0, _col1, _col2
+ Select Operator
+ expressions:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ expr: _col2
+ type: bigint
+ outputColumnNames: _col0, _col1, _col2
+ File Output Operator
+ compressed: false
+ GlobalTableId: 0
+ table:
+ input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+
+
+PREHOOK: query: insert overwrite table union_subq_union
+select * from (
+
+select * from (
+ select key, value from src
+ union all
+ select key, value from
+ (
+ select key, value, count(1) from src group by key, value
+ union all
+ select key, value, count(1) from src group by key, value
+ ) subq
+) a
+
+union all
+
+select key, value from src
+) aa
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: default@union_subq_union
+POSTHOOK: query: insert overwrite table union_subq_union
+select * from (
+
+select * from (
+ select key, value from src
+ union all
+ select key, value from
+ (
+ select key, value, count(1) from src group by key, value
+ union all
+ select key, value, count(1) from src group by key, value
+ ) subq
+) a
+
+union all
+
+select key, value from src
+) aa
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: default@union_subq_union
+POSTHOOK: Lineage: union_subq_union.key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), (src)src.FieldSchema(name:key, type:string, comment:default), (src)src.FieldSchema(name:key, type:string, comment:default), (src)src.FieldSchema(name:key, type:string, comment:default), ]
+POSTHOOK: Lineage: union_subq_union.value EXPRESSION [(src)src.FieldSchema(name:value, type:string, comment:default), (src)src.FieldSchema(name:value, type:string, comment:default), (src)src.FieldSchema(name:value, type:string, comment:default), (src)src.FieldSchema(name:value, type:string, comment:default), ]
+PREHOOK: query: select * from union_subq_union order by key, value limit 20
+PREHOOK: type: QUERY
+PREHOOK: Input: default@union_subq_union
+#### A masked pattern was here ####
+POSTHOOK: query: select * from union_subq_union order by key, value limit 20
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@union_subq_union
+#### A masked pattern was here ####
+POSTHOOK: Lineage: union_subq_union.key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), (src)src.FieldSchema(name:key, type:string, comment:default), (src)src.FieldSchema(name:key, type:string, comment:default), (src)src.FieldSchema(name:key, type:string, comment:default), ]
+POSTHOOK: Lineage: union_subq_union.value EXPRESSION [(src)src.FieldSchema(name:value, type:string, comment:default), (src)src.FieldSchema(name:value, type:string, comment:default), (src)src.FieldSchema(name:value, type:string, comment:default), (src)src.FieldSchema(name:value, type:string, comment:default), ]
+0 val_0
+0 val_0
+0 val_0
+0 val_0
+0 val_0
+0 val_0
+0 val_0
+0 val_0
+2 val_2
+2 val_2
+2 val_2
+2 val_2
+4 val_4
+4 val_4
+4 val_4
+4 val_4
+5 val_5
+5 val_5
+5 val_5
+5 val_5