Index: ql/src/test/results/clientpositive/input11_limit.q.out =================================================================== --- ql/src/test/results/clientpositive/input11_limit.q.out (revision 132828) +++ ql/src/test/results/clientpositive/input11_limit.q.out (working copy) @@ -21,12 +21,24 @@ expr: value type: string Limit - File Output Operator - table: - input format: org.apache.hadoop.mapred.TextInputFormat - output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat - serde: org.apache.hadoop.hive.serde2.MetadataTypedColumnsetSerDe - name: dest1 + Reduce Output Operator + sort order: + tag: -1 + value expressions: + expr: 0 + type: string + expr: 1 + type: string + # Reducers: 1 + Reduce Operator Tree: + Extract + Limit + File Output Operator + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat + serde: org.apache.hadoop.hive.serde2.MetadataTypedColumnsetSerDe + name: dest1 Stage: Stage-0 Move Operator Index: ql/src/test/results/clientpositive/input1_limit.q.out =================================================================== --- ql/src/test/results/clientpositive/input1_limit.q.out (revision 132828) +++ ql/src/test/results/clientpositive/input1_limit.q.out (working copy) @@ -3,7 +3,9 @@ STAGE DEPENDENCIES: Stage-1 is a root stage - Stage-0 depends on stages: Stage-1 + Stage-0 depends on stages: Stage-1, Stage-2 + Stage-2 depends on stages: Stage-1 + Stage-0 depends on stages: Stage-1, Stage-2 STAGE PLANS: Stage: Stage-1 @@ -21,12 +23,14 @@ expr: value type: string Limit - File Output Operator - table: - input format: org.apache.hadoop.mapred.TextInputFormat - output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat - serde: org.apache.hadoop.hive.serde2.MetadataTypedColumnsetSerDe - name: dest1 + Reduce Output Operator + sort order: + tag: -1 + value expressions: + expr: 0 + type: string + expr: 1 + type: string Filter Operator predicate: expr: (key < 100) @@ -40,10 +44,19 @@ Limit File Output Operator table: - input format: org.apache.hadoop.mapred.TextInputFormat - output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat - serde: org.apache.hadoop.hive.serde2.MetadataTypedColumnsetSerDe - name: dest2 + input format: org.apache.hadoop.mapred.SequenceFileInputFormat + output format: org.apache.hadoop.mapred.SequenceFileOutputFormat + name: binary_table + # Reducers: 1 + Reduce Operator Tree: + Extract + Limit + File Output Operator + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat + serde: org.apache.hadoop.hive.serde2.MetadataTypedColumnsetSerDe + name: dest1 Stage: Stage-0 Move Operator @@ -61,7 +74,30 @@ serde: org.apache.hadoop.hive.serde2.MetadataTypedColumnsetSerDe name: dest2 + Stage: Stage-2 + Map Reduce + Alias -> Map Operator Tree: + /tmp/hive-njain/153468547/613626322.10002 + Reduce Output Operator + sort order: + tag: -1 + value expressions: + expr: 0 + type: string + expr: 1 + type: string + # Reducers: 1 + Reduce Operator Tree: + Extract + Limit + File Output Operator + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat + serde: org.apache.hadoop.hive.serde2.MetadataTypedColumnsetSerDe + name: dest2 + 86 val_86 27 val_27 98 val_98 Index: ql/src/test/results/clientpositive/groupby1_limit.q.out =================================================================== --- ql/src/test/results/clientpositive/groupby1_limit.q.out (revision 132828) +++ ql/src/test/results/clientpositive/groupby1_limit.q.out (working copy) @@ -4,7 +4,8 @@ STAGE DEPENDENCIES: Stage-1 is a root stage Stage-2 depends on stages: Stage-1 - Stage-0 depends on stages: Stage-2 + Stage-3 depends on stages: Stage-2 + Stage-0 depends on stages: Stage-3 STAGE PLANS: Stage: Stage-1 @@ -40,7 +41,7 @@ Stage: Stage-2 Map Reduce Alias -> Map Operator Tree: - /tmp/hive-zshao/1303599869/24932739.10001 + /tmp/hive-njain/204678853/68624415.10002 Reduce Output Operator key expressions: expr: 0 @@ -70,11 +71,33 @@ Limit File Output Operator table: - input format: org.apache.hadoop.mapred.TextInputFormat - output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat - serde: org.apache.hadoop.hive.serde2.MetadataTypedColumnsetSerDe - name: dest1 + input format: org.apache.hadoop.mapred.SequenceFileInputFormat + output format: org.apache.hadoop.mapred.SequenceFileOutputFormat + name: binary_table + Stage: Stage-3 + Map Reduce + Alias -> Map Operator Tree: + /tmp/hive-njain/204678853/68624415.10001 + Reduce Output Operator + sort order: + tag: -1 + value expressions: + expr: 0 + type: string + expr: 1 + type: double + # Reducers: 1 + Reduce Operator Tree: + Extract + Limit + File Output Operator + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat + serde: org.apache.hadoop.hive.serde2.MetadataTypedColumnsetSerDe + name: dest1 + Stage: Stage-0 Move Operator tables: Index: ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (revision 132828) +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (working copy) @@ -2012,6 +2012,7 @@ // Add the limit operator to get the value fields Operator curr = genLimitPlan(dest, qb, input, limit); + // If it is a outer most query, the exact limit is applied by the fetch task if (isOuterQuery) return curr; @@ -2587,7 +2588,7 @@ curr = genConversionOps(dest, qb, curr); // exact limit can be taken care of by the fetch operator if (limit != null) { - curr = genLimitMapRedPlan(dest, qb, curr, limit.intValue(), true); + curr = genLimitMapRedPlan(dest, qb, curr, limit.intValue(), qb.getIsQuery()); qb.getParseInfo().setOuterQueryLimit(limit.intValue()); } curr = genFileSinkPlan(dest, qb, curr); Index: ql/src/test/results/clientpositive/input3_limit.q.out =================================================================== --- ql/src/test/results/clientpositive/input3_limit.q.out (revision 0) +++ ql/src/test/results/clientpositive/input3_limit.q.out (revision 0) @@ -0,0 +1,69 @@ +ABSTRACT SYNTAX TREE: + (TOK_QUERY (TOK_FROM (TOK_TABREF T1 a)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB T2)) (TOK_SELECT (TOK_SELEXPR (TOK_COLREF a key)) (TOK_SELEXPR (TOK_COLREF a value))) (TOK_LIMIT 20))) + +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 depends on stages: Stage-1 + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Alias -> Map Operator Tree: + a + Select Operator + expressions: + expr: key + type: string + expr: value + type: string + Limit + Reduce Output Operator + sort order: + tag: -1 + value expressions: + expr: 0 + type: string + expr: 1 + type: string + # Reducers: 1 + Reduce Operator Tree: + Extract + Limit + File Output Operator + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat + serde: org.apache.hadoop.hive.serde2.MetadataTypedColumnsetSerDe + name: t2 + + Stage: Stage-0 + Move Operator + tables: + replace: + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat + serde: org.apache.hadoop.hive.serde2.MetadataTypedColumnsetSerDe + name: t2 + + +193 val_193 +213 val_213 +128 val_128 +66 val_66 +369 val_369 +224 val_224 +273 val_273 +150 val_150 +401 val_401 +238 val_238 +265 val_265 +484 val_484 +98 val_98 +278 val_278 +255 val_255 +409 val_409 +165 val_165 +27 val_27 +311 val_311 +86 val_86 Index: ql/src/test/queries/clientpositive/input3_limit.q =================================================================== --- ql/src/test/queries/clientpositive/input3_limit.q (revision 0) +++ ql/src/test/queries/clientpositive/input3_limit.q (revision 0) @@ -0,0 +1,19 @@ +DROP TABLE T1; +CREATE TABLE T1(key STRING, value STRING) STORED AS TEXTFILE; +LOAD DATA LOCAL INPATH '../data/files/kv1.txt' INTO TABLE T1; +LOAD DATA LOCAL INPATH '../data/files/kv2.txt' INTO TABLE T1; + +DROP TABLE T2; +CREATE TABLE T2(key STRING, value STRING); + +EXPLAIN +INSERT OVERWRITE TABLE T2 SELECT a.key, a.value from T1 a LIMIT 20; + + +INSERT OVERWRITE TABLE T2 SELECT a.key, a.value from T1 a LIMIT 20; + +SELECT * FROM T2; + + +DROP TABLE T1; +DROP TABLE T2;