diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java index 7c50155..00fe2a8 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java @@ -1662,8 +1662,10 @@ private RelNode genTableLogicalPlan(String tableAlias, QB qb) throws SemanticExc try { // 1. If the table has a Sample specified, bail from Calcite path. + // 2. or If hive test mode is on (because we generate sampling in hive test mode) if (qb.getParseInfo().getTabSample(tableAlias) != null - || getNameToSplitSampleMap().containsKey(tableAlias)) { + || getNameToSplitSampleMap().containsKey(tableAlias) + || conf.getBoolVar(HiveConf.ConfVars.HIVETESTMODE)) { String msg = String.format("Table Sample specified for %s." + " Currently we don't support Table Sample clauses in CBO," + " turn off cbo for queries on tableSamples.", tableAlias); diff --git a/ql/src/test/queries/clientpositive/input30.q b/ql/src/test/queries/clientpositive/input30.q index 7859bbc..5da18d0 100644 --- a/ql/src/test/queries/clientpositive/input30.q +++ b/ql/src/test/queries/clientpositive/input30.q @@ -20,5 +20,19 @@ set hive.test.mode=false; select * from tst_dest30; +set hive.cbo.returnpath.hiveop=true; + +explain +insert overwrite table dest30 +select count(1) from src; + +insert overwrite table dest30 +select count(1) from src; + +set hive.test.mode=false; + +select * from tst_dest30; + +set hive.cbo.returnpath.hiveop=false; diff --git a/ql/src/test/results/clientpositive/input30.q.out b/ql/src/test/results/clientpositive/input30.q.out index e728f04..f7ad032 100644 --- a/ql/src/test/results/clientpositive/input30.q.out +++ b/ql/src/test/results/clientpositive/input30.q.out @@ -88,7 +88,90 @@ select count(1) from src POSTHOOK: type: QUERY POSTHOOK: Input: default@src POSTHOOK: Output: default@tst_dest30 -POSTHOOK: Lineage: tst_dest30.a EXPRESSION [] +POSTHOOK: Lineage: tst_dest30.a EXPRESSION [(src)src.null, ] +PREHOOK: query: select * from tst_dest30 +PREHOOK: type: QUERY +PREHOOK: Input: default@tst_dest30 +#### A masked pattern was here #### +POSTHOOK: query: select * from tst_dest30 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@tst_dest30 +#### A masked pattern was here #### +18 +PREHOOK: query: explain +insert overwrite table dest30 +select count(1) from src +PREHOOK: type: QUERY +POSTHOOK: query: explain +insert overwrite table dest30 +select count(1) from src +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 depends on stages: Stage-1 + Stage-2 depends on stages: Stage-0 + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Map Operator Tree: + TableScan + alias: src + Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: COMPLETE + Select Operator + Statistics: Num rows: 500 Data size: 2000 Basic stats: COMPLETE Column stats: COMPLETE + Group By Operator + aggregations: count(1) + mode: hash + outputColumnNames: _col0 + Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE + Reduce Output Operator + sort order: + Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE + value expressions: _col0 (type: bigint) + Reduce Operator Tree: + Group By Operator + aggregations: count(VALUE._col0) + mode: mergepartial + outputColumnNames: $f0 + Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE + Select Operator + expressions: UDFToInteger($f0) (type: int) + outputColumnNames: _col0 + Statistics: Num rows: 1 Data size: 4 Basic stats: COMPLETE Column stats: COMPLETE + File Output Operator + compressed: false + Statistics: Num rows: 1 Data size: 4 Basic stats: COMPLETE Column stats: COMPLETE + 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.dest30 + + 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.dest30 + + Stage: Stage-2 + Stats-Aggr Operator + +PREHOOK: query: insert overwrite table dest30 +select count(1) from src +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: default@dest30 +POSTHOOK: query: insert overwrite table dest30 +select count(1) from src +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: default@dest30 +POSTHOOK: Lineage: dest30.a EXPRESSION [] PREHOOK: query: select * from tst_dest30 PREHOOK: type: QUERY PREHOOK: Input: default@tst_dest30