You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by jc...@apache.org on 2016/12/16 13:58:28 UTC
[2/6] hive git commit: HIVE-14496: Enable Calcite rewriting with
materialized views (Jesus Camacho Rodriguez, reviewed by Ashutosh Chauhan)
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java
----------------------------------------------------------------------
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 16df496..07155fd 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
@@ -46,9 +46,9 @@ import org.apache.calcite.adapter.druid.DruidRules;
import org.apache.calcite.adapter.druid.DruidSchema;
import org.apache.calcite.adapter.druid.DruidTable;
import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptMaterialization;
import org.apache.calcite.plan.RelOptPlanner;
import org.apache.calcite.plan.RelOptPlanner.Executor;
-import org.apache.calcite.plan.RelOptQuery;
import org.apache.calcite.plan.RelOptRule;
import org.apache.calcite.plan.RelOptSchema;
import org.apache.calcite.plan.RelOptUtil;
@@ -70,6 +70,7 @@ import org.apache.calcite.rel.core.SetOp;
import org.apache.calcite.rel.core.TableScan;
import org.apache.calcite.rel.metadata.CachingRelMetadataProvider;
import org.apache.calcite.rel.metadata.ChainedRelMetadataProvider;
+import org.apache.calcite.rel.metadata.DefaultRelMetadataProvider;
import org.apache.calcite.rel.metadata.JaninoRelMetadataProvider;
import org.apache.calcite.rel.metadata.RelMetadataProvider;
import org.apache.calcite.rel.metadata.RelMetadataQuery;
@@ -108,7 +109,6 @@ import org.apache.calcite.util.CompositeList;
import org.apache.calcite.util.ImmutableBitSet;
import org.apache.calcite.util.ImmutableIntList;
import org.apache.calcite.util.Pair;
-import org.apache.commons.lang.mutable.MutableBoolean;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hive.conf.Constants;
import org.apache.hadoop.hive.conf.HiveConf;
@@ -126,6 +126,7 @@ import org.apache.hadoop.hive.ql.exec.OperatorFactory;
import org.apache.hadoop.hive.ql.exec.RowSchema;
import org.apache.hadoop.hive.ql.lib.Node;
import org.apache.hadoop.hive.ql.log.PerfLogger;
+import org.apache.hadoop.hive.ql.metadata.Hive;
import org.apache.hadoop.hive.ql.metadata.HiveException;
import org.apache.hadoop.hive.ql.metadata.Table;
import org.apache.hadoop.hive.ql.metadata.VirtualColumn;
@@ -193,6 +194,7 @@ import org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveSortRemoveRule;
import org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveSortUnionReduceRule;
import org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveUnionPullUpConstantsRule;
import org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveWindowingFixRule;
+import org.apache.hadoop.hive.ql.optimizer.calcite.rules.views.HiveMaterializedViewFilterScanRule;
import org.apache.hadoop.hive.ql.optimizer.calcite.translator.ASTConverter;
import org.apache.hadoop.hive.ql.optimizer.calcite.translator.HiveOpConverter;
import org.apache.hadoop.hive.ql.optimizer.calcite.translator.JoinCondTypeCheckProcFactory;
@@ -240,7 +242,6 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableList.Builder;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
-import com.google.common.math.IntMath;
public class CalcitePlanner extends SemanticAnalyzer {
@@ -276,6 +277,33 @@ public class CalcitePlanner extends SemanticAnalyzer {
}
}
+ /**
+ * This method is useful if we want to obtain the logical plan after being parsed and
+ * optimized by Calcite.
+ *
+ * @return the Calcite plan for the query, null if it could not be generated
+ */
+ public RelNode genLogicalPlan(ASTNode ast) throws SemanticException {
+ LOG.info("Starting generating logical plan");
+ PreCboCtx cboCtx = new PreCboCtx();
+ if (!genResolvedParseTree(ast, cboCtx)) {
+ return null;
+ }
+ ASTNode queryForCbo = ast;
+ if (cboCtx.type == PreCboCtx.Type.CTAS_OR_MV) {
+ queryForCbo = cboCtx.nodeOfInterest; // nodeOfInterest is the query
+ }
+ runCBO = canCBOHandleAst(queryForCbo, getQB(), cboCtx);
+ if (!runCBO) {
+ return null;
+ }
+ profilesCBO = obtainCBOProfiles(queryProperties);
+ disableJoinMerge = true;
+ final RelNode resPlan = logicalPlan();
+ LOG.info("Finished generating logical plan");
+ return resPlan;
+ }
+
@Override
@SuppressWarnings("rawtypes")
Operator genOPTree(ASTNode ast, PlannerContext plannerCtx) throws SemanticException {
@@ -758,13 +786,12 @@ public class CalcitePlanner extends SemanticAnalyzer {
}
/**
- * Get Optimized AST for the given QB tree in the semAnalyzer.
+ * Get optimized logical plan for the given QB tree in the semAnalyzer.
*
- * @return Optimized operator tree translated in to Hive AST
+ * @return
* @throws SemanticException
*/
- ASTNode getOptimizedAST() throws SemanticException {
- ASTNode optiqOptimizedAST = null;
+ RelNode logicalPlan() throws SemanticException {
RelNode optimizedOptiqPlan = null;
CalcitePlannerAction calcitePlannerAction = null;
@@ -780,9 +807,19 @@ public class CalcitePlanner extends SemanticAnalyzer {
rethrowCalciteException(e);
throw new AssertionError("rethrowCalciteException didn't throw for " + e.getMessage());
}
- optiqOptimizedAST = ASTConverter.convert(optimizedOptiqPlan, resultSchema,
- HiveConf.getBoolVar(conf, HiveConf.ConfVars.HIVE_COLUMN_ALIGNMENT));
+ return optimizedOptiqPlan;
+ }
+ /**
+ * Get Optimized AST for the given QB tree in the semAnalyzer.
+ *
+ * @return Optimized operator tree translated in to Hive AST
+ * @throws SemanticException
+ */
+ ASTNode getOptimizedAST() throws SemanticException {
+ RelNode optimizedOptiqPlan = logicalPlan();
+ ASTNode optiqOptimizedAST = ASTConverter.convert(optimizedOptiqPlan, resultSchema,
+ HiveConf.getBoolVar(conf, HiveConf.ConfVars.HIVE_COLUMN_ALIGNMENT));
return optiqOptimizedAST;
}
@@ -990,11 +1027,10 @@ public class CalcitePlanner extends SemanticAnalyzer {
HiveRulesRegistry registry = new HiveRulesRegistry();
HivePlannerContext confContext = new HivePlannerContext(algorithmsConf, registry);
RelOptPlanner planner = HiveVolcanoPlanner.createPlanner(confContext);
- final RelOptQuery query = new RelOptQuery(planner);
final RexBuilder rexBuilder = cluster.getRexBuilder();
- cluster = query.createCluster(rexBuilder.getTypeFactory(), rexBuilder);
+ final RelOptCluster optCluster = RelOptCluster.create(planner, rexBuilder);
- this.cluster = cluster;
+ this.cluster = optCluster;
this.relOptSchema = relOptSchema;
PerfLogger perfLogger = SessionState.getPerfLogger();
@@ -1014,7 +1050,7 @@ public class CalcitePlanner extends SemanticAnalyzer {
// We need to get the ColumnAccessInfo and viewToTableSchema for views.
HiveRelFieldTrimmer fieldTrimmer = new HiveRelFieldTrimmer(null,
- HiveRelFactories.HIVE_BUILDER.create(cluster, null), this.columnAccessInfo,
+ HiveRelFactories.HIVE_BUILDER.create(optCluster, null), this.columnAccessInfo,
this.viewProjectToTableSchema);
fieldTrimmer.trim(calciteGenPlan);
@@ -1024,7 +1060,7 @@ public class CalcitePlanner extends SemanticAnalyzer {
JaninoRelMetadataProvider.of(mdProvider.getMetadataProvider()));
// Create executor
- Executor executorProvider = new HiveRexExecutorImpl(cluster);
+ Executor executorProvider = new HiveRexExecutorImpl(optCluster);
// 2. Apply pre-join order optimizations
calcitePreCboPlan = applyPreJoinOrderingTransforms(calciteGenPlan,
@@ -1038,7 +1074,7 @@ public class CalcitePlanner extends SemanticAnalyzer {
try {
List<RelMetadataProvider> list = Lists.newArrayList();
list.add(mdProvider.getMetadataProvider());
- RelTraitSet desiredTraits = cluster
+ RelTraitSet desiredTraits = optCluster
.traitSetOf(HiveRelNode.CONVENTION, RelCollations.EMPTY);
HepProgramBuilder hepPgmBldr = new HepProgramBuilder().addMatchOrder(HepMatchOrder.BOTTOM_UP);
@@ -1050,7 +1086,7 @@ public class CalcitePlanner extends SemanticAnalyzer {
hepPlanner.registerMetadataProviders(list);
RelMetadataProvider chainedProvider = ChainedRelMetadataProvider.of(list);
- cluster.setMetadataProvider(new CachingRelMetadataProvider(chainedProvider, hepPlanner));
+ optCluster.setMetadataProvider(new CachingRelMetadataProvider(chainedProvider, hepPlanner));
RelNode rootRel = calcitePreCboPlan;
hepPlanner.setRoot(rootRel);
@@ -1085,27 +1121,70 @@ public class CalcitePlanner extends SemanticAnalyzer {
HiveJoinCommuteRule.INSTANCE);
perfLogger.PerfLogEnd(this.getClass().getName(), PerfLogger.OPTIMIZER, "Calcite: Optimizations without stats");
- // 5. Run aggregate-join transpose (cost based)
+ // 5. Materialized view based rewriting
+ // We disable it for CTAS and MV creation queries (trying to avoid any problem
+ // due to data freshness)
+ if (conf.getBoolVar(ConfVars.HIVE_MATERIALIZED_VIEW_ENABLE_AUTO_REWRITING) &&
+ !getQB().isMaterializedView() && !getQB().isCTAS()) {
+ perfLogger.PerfLogBegin(this.getClass().getName(), PerfLogger.OPTIMIZER);
+ // Use Calcite cost model for view rewriting
+ RelMetadataProvider calciteMdProvider = DefaultRelMetadataProvider.INSTANCE;
+ RelMetadataQuery.THREAD_PROVIDERS.set(JaninoRelMetadataProvider.of(calciteMdProvider));
+ planner.registerMetadataProviders(Lists.newArrayList(calciteMdProvider));
+ // Add views to planner
+ List<RelOptMaterialization> materializations = new ArrayList<>();
+ try {
+ materializations = Hive.get().getRewritingMaterializedViews();
+ // We need to use the current cluster for the scan operator on views,
+ // otherwise the planner will throw an Exception (different planners)
+ materializations = Lists.transform(materializations,
+ new Function<RelOptMaterialization, RelOptMaterialization>() {
+ @Override
+ public RelOptMaterialization apply(RelOptMaterialization materialization) {
+ final RelNode viewScan = materialization.tableRel;
+ final RelNode newViewScan;
+ if (viewScan instanceof DruidQuery) {
+ final DruidQuery dq = (DruidQuery) viewScan;
+ newViewScan = DruidQuery.create(optCluster, optCluster.traitSetOf(HiveRelNode.CONVENTION),
+ (RelOptHiveTable) viewScan.getTable(), dq.getDruidTable(),
+ ImmutableList.<RelNode>of(dq.getTableScan()));
+ } else {
+ newViewScan = new HiveTableScan(optCluster, optCluster.traitSetOf(HiveRelNode.CONVENTION),
+ (RelOptHiveTable) viewScan.getTable(), viewScan.getTable().getQualifiedName().get(0),
+ null, false, false);
+ }
+ return new RelOptMaterialization(newViewScan, materialization.queryRel, null);
+ }
+ }
+ );
+ } catch (HiveException e) {
+ LOG.warn("Exception loading materialized views", e);
+ }
+ if (!materializations.isEmpty()) {
+ for (RelOptMaterialization materialization : materializations) {
+ planner.addMaterialization(materialization);
+ }
+ // Add view-based rewriting rules to planner
+ planner.addRule(HiveMaterializedViewFilterScanRule.INSTANCE);
+ // Optimize plan
+ planner.setRoot(calciteOptimizedPlan);
+ calciteOptimizedPlan = planner.findBestExp();
+ // Remove view-based rewriting rules from planner
+ planner.clear();
+ }
+ // Restore default cost model
+ RelMetadataQuery.THREAD_PROVIDERS.set(JaninoRelMetadataProvider.of(mdProvider.getMetadataProvider()));
+ perfLogger.PerfLogEnd(this.getClass().getName(), PerfLogger.OPTIMIZER, "Calcite: View-based rewriting");
+ }
+
+ // 6. Run aggregate-join transpose (cost based)
// If it failed because of missing stats, we continue with
// the rest of optimizations
if (conf.getBoolVar(ConfVars.AGGR_JOIN_TRANSPOSE)) {
perfLogger.PerfLogBegin(this.getClass().getName(), PerfLogger.OPTIMIZER);
try {
- HepProgramBuilder hepPgmBldr = new HepProgramBuilder().addMatchOrder(HepMatchOrder.BOTTOM_UP);
- hepPgmBldr.addRuleInstance(HiveAggregateJoinTransposeRule.INSTANCE);
-
- HepProgram hepPgm = hepPgmBldr.build();
- HepPlanner hepPlanner = new HepPlanner(hepPgm);
-
- List<RelMetadataProvider> list = Lists.newArrayList();
- list.add(mdProvider.getMetadataProvider());
- hepPlanner.registerMetadataProviders(list);
- RelMetadataProvider chainedProvider = ChainedRelMetadataProvider.of(list);
- cluster.setMetadataProvider(new CachingRelMetadataProvider(chainedProvider, hepPlanner));
-
- hepPlanner.setRoot(calciteOptimizedPlan);
-
- calciteOptimizedPlan = hepPlanner.findBestExp();
+ calciteOptimizedPlan = hepPlan(calciteOptimizedPlan, false, mdProvider.getMetadataProvider(), null,
+ HepMatchOrder.BOTTOM_UP, HiveAggregateJoinTransposeRule.INSTANCE);
} catch (Exception e) {
boolean isMissingStats = noColsMissingStats.get() > 0;
if (isMissingStats) {
@@ -1118,7 +1197,7 @@ public class CalcitePlanner extends SemanticAnalyzer {
perfLogger.PerfLogEnd(this.getClass().getName(), PerfLogger.OPTIMIZER, "Calcite: Aggregate join transpose");
}
- // 6.convert Join + GBy to semijoin
+ // 7.convert Join + GBy to semijoin
// run this rule at later stages, since many calcite rules cant deal with semijoin
if (conf.getBoolVar(ConfVars.SEMIJOIN_CONVERSION)) {
perfLogger.PerfLogBegin(this.getClass().getName(), PerfLogger.OPTIMIZER);
@@ -1127,7 +1206,7 @@ public class CalcitePlanner extends SemanticAnalyzer {
}
- // 7. Run rule to fix windowing issue when it is done over
+ // 8. Run rule to fix windowing issue when it is done over
// aggregation columns (HIVE-10627)
if (profilesCBO.contains(ExtendedCBOProfile.WINDOWING_POSTPROCESSING)) {
perfLogger.PerfLogBegin(this.getClass().getName(), PerfLogger.OPTIMIZER);
@@ -1136,7 +1215,7 @@ public class CalcitePlanner extends SemanticAnalyzer {
perfLogger.PerfLogEnd(this.getClass().getName(), PerfLogger.OPTIMIZER, "Calcite: Window fixing rule");
}
- // 8. Apply Druid transformation rules
+ // 9. Apply Druid transformation rules
perfLogger.PerfLogBegin(this.getClass().getName(), PerfLogger.OPTIMIZER);
calciteOptimizedPlan = hepPlan(calciteOptimizedPlan, false, mdProvider.getMetadataProvider(), null,
HepMatchOrder.BOTTOM_UP, DruidRules.FILTER, DruidRules.PROJECT_AGGREGATE,
@@ -1144,10 +1223,10 @@ public class CalcitePlanner extends SemanticAnalyzer {
DruidRules.SORT, DruidRules.SORT_PROJECT);
perfLogger.PerfLogEnd(this.getClass().getName(), PerfLogger.OPTIMIZER, "Calcite: Druid transformation rules");
- // 9. Run rules to aid in translation from Calcite tree to Hive tree
+ // 10. Run rules to aid in translation from Calcite tree to Hive tree
if (HiveConf.getBoolVar(conf, ConfVars.HIVE_CBO_RETPATH_HIVEOP)) {
perfLogger.PerfLogBegin(this.getClass().getName(), PerfLogger.OPTIMIZER);
- // 9.1. Merge join into multijoin operators (if possible)
+ // 10.1. Merge join into multijoin operators (if possible)
calciteOptimizedPlan = hepPlan(calciteOptimizedPlan, true, mdProvider.getMetadataProvider(), null,
HepMatchOrder.BOTTOM_UP, HiveJoinProjectTransposeRule.BOTH_PROJECT_INCLUDE_OUTER,
HiveJoinProjectTransposeRule.LEFT_PROJECT_INCLUDE_OUTER,
@@ -1156,7 +1235,7 @@ public class CalcitePlanner extends SemanticAnalyzer {
// The previous rules can pull up projections through join operators,
// thus we run the field trimmer again to push them back down
fieldTrimmer = new HiveRelFieldTrimmer(null,
- HiveRelFactories.HIVE_BUILDER.create(cluster, null));
+ HiveRelFactories.HIVE_BUILDER.create(optCluster, null));
calciteOptimizedPlan = fieldTrimmer.trim(calciteOptimizedPlan);
calciteOptimizedPlan = hepPlan(calciteOptimizedPlan, false, mdProvider.getMetadataProvider(), null,
HepMatchOrder.BOTTOM_UP, ProjectRemoveRule.INSTANCE,
@@ -1165,7 +1244,7 @@ public class CalcitePlanner extends SemanticAnalyzer {
HiveFilterProjectTSTransposeRule.INSTANCE, HiveFilterProjectTSTransposeRule.INSTANCE_DRUID,
HiveProjectFilterPullUpConstantsRule.INSTANCE);
- // 9.2. Introduce exchange operators below join/multijoin operators
+ // 10.2. Introduce exchange operators below join/multijoin operators
calciteOptimizedPlan = hepPlan(calciteOptimizedPlan, false, mdProvider.getMetadataProvider(), null,
HepMatchOrder.BOTTOM_UP, HiveInsertExchange4JoinRule.EXCHANGE_BELOW_JOIN,
HiveInsertExchange4JoinRule.EXCHANGE_BELOW_MULTIJOIN);
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g b/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g
index 55915a6..8015eba 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g
@@ -256,6 +256,8 @@ TOK_ALTERVIEW_DROPPARTS;
TOK_ALTERVIEW_RENAME;
TOK_CREATE_MATERIALIZED_VIEW;
TOK_DROP_MATERIALIZED_VIEW;
+TOK_REWRITE_ENABLED;
+TOK_REWRITE_DISABLED;
TOK_VIEWPARTCOLS;
TOK_EXPLAIN;
TOK_EXPLAIN_SQ_REWRITE;
@@ -882,6 +884,20 @@ ifNotExists
-> ^(TOK_IFNOTEXISTS)
;
+rewriteEnabled
+@init { pushMsg("rewrite enabled clause", state); }
+@after { popMsg(state); }
+ : KW_ENABLE KW_REWRITE
+ -> ^(TOK_REWRITE_ENABLED)
+ ;
+
+rewriteDisabled
+@init { pushMsg("rewrite disabled clause", state); }
+@after { popMsg(state); }
+ : KW_DISABLE KW_REWRITE
+ -> ^(TOK_REWRITE_DISABLED)
+ ;
+
storedAsDirs
@init { pushMsg("stored as directories", state); }
@after { popMsg(state); }
@@ -1832,10 +1848,11 @@ createMaterializedViewStatement
}
@after { popMsg(state); }
: KW_CREATE KW_MATERIALIZED KW_VIEW (ifNotExists)? name=tableName
- tableComment? tableRowFormat? tableFileFormat? tableLocation?
+ rewriteEnabled? tableComment? tableRowFormat? tableFileFormat? tableLocation?
tablePropertiesPrefixed? KW_AS selectStatementWithCTE
-> ^(TOK_CREATE_MATERIALIZED_VIEW $name
ifNotExists?
+ rewriteEnabled?
tableComment?
tableRowFormat?
tableFileFormat?
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
index 7e6dcf3..1f6dfdd 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
@@ -11976,6 +11976,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
String dbDotTable = getDotName(qualTabName);
List<FieldSchema> cols = null;
boolean ifNotExists = false;
+ boolean rewriteEnabled = false;
boolean orReplace = false;
boolean isAlterViewAs = false;
String comment = null;
@@ -11999,6 +12000,9 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
case HiveParser.TOK_IFNOTEXISTS:
ifNotExists = true;
break;
+ case HiveParser.TOK_REWRITE_ENABLED:
+ rewriteEnabled = true;
+ break;
case HiveParser.TOK_ORREPLACE:
orReplace = true;
break;
@@ -12058,20 +12062,21 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
if (isMaterialized) {
createVwDesc = new CreateViewDesc(
- dbDotTable, cols, comment, tblProps, partColNames,
- ifNotExists, orReplace, isAlterViewAs, storageFormat.getInputFormat(),
- storageFormat.getOutputFormat(), location, storageFormat.getSerde(),
- storageFormat.getStorageHandler(), storageFormat.getSerdeProps());
+ dbDotTable, cols, comment, tblProps, partColNames,
+ ifNotExists, orReplace, rewriteEnabled, isAlterViewAs,
+ storageFormat.getInputFormat(), storageFormat.getOutputFormat(),
+ location, storageFormat.getSerde(), storageFormat.getStorageHandler(),
+ storageFormat.getSerdeProps());
addDbAndTabToOutputs(qualTabName, TableType.MATERIALIZED_VIEW);
queryState.setCommandType(HiveOperation.CREATE_MATERIALIZED_VIEW);
qb.setViewDesc(createVwDesc);
} else {
createVwDesc = new CreateViewDesc(
- dbDotTable, cols, comment, tblProps, partColNames,
- ifNotExists, orReplace, isAlterViewAs, storageFormat.getInputFormat(),
- storageFormat.getOutputFormat(), storageFormat.getSerde());
+ dbDotTable, cols, comment, tblProps, partColNames,
+ ifNotExists, orReplace, isAlterViewAs, storageFormat.getInputFormat(),
+ storageFormat.getOutputFormat(), storageFormat.getSerde());
rootTasks.add(TaskFactory.get(new DDLWork(getInputs(), getOutputs(),
- createVwDesc), conf));
+ createVwDesc), conf));
addDbAndTabToOutputs(qualTabName, TableType.VIRTUAL_VIEW);
queryState.setCommandType(HiveOperation.CREATEVIEW);
}
@@ -12083,8 +12088,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
return this.createVwDesc;
}
- // validate the create view statement
- // the statement could be CREATE VIEW, REPLACE VIEW, or ALTER VIEW AS SELECT
+ // validate the (materialized) view statement
// check semantic conditions
private void validateCreateView()
throws SemanticException {
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/java/org/apache/hadoop/hive/ql/parse/StorageFormat.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/StorageFormat.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/StorageFormat.java
index d3b955c..64218b2 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/StorageFormat.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/StorageFormat.java
@@ -111,8 +111,8 @@ public class StorageFormat {
String defaultManagedFormat;
if (isMaterializedView) {
defaultFormat = defaultManagedFormat =
- HiveConf.getVar(conf, HiveConf.ConfVars.HIVEMATERIALIZEDVIEWFILEFORMAT);
- serde = HiveConf.getVar(conf, HiveConf.ConfVars.HIVEMATERIALIZEDVIEWSERDE);
+ HiveConf.getVar(conf, HiveConf.ConfVars.HIVE_MATERIALIZED_VIEW_FILE_FORMAT);
+ serde = HiveConf.getVar(conf, HiveConf.ConfVars.HIVE_MATERIALIZED_VIEW_SERDE);
} else {
defaultFormat = HiveConf.getVar(conf, HiveConf.ConfVars.HIVEDEFAULTFILEFORMAT);
defaultManagedFormat = HiveConf.getVar(conf, HiveConf.ConfVars.HIVEDEFAULTMANAGEDFILEFORMAT);
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/java/org/apache/hadoop/hive/ql/plan/CreateViewDesc.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/CreateViewDesc.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/CreateViewDesc.java
index 6830bda..a69f8e6 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/CreateViewDesc.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/CreateViewDesc.java
@@ -38,6 +38,7 @@ public class CreateViewDesc extends DDLDesc implements Serializable {
private String viewName;
private String originalText;
private String expandedText;
+ private boolean rewriteEnabled;
private List<FieldSchema> schema;
private Map<String, String> tblProps;
private List<String> partColNames;
@@ -79,7 +80,7 @@ public class CreateViewDesc extends DDLDesc implements Serializable {
*/
public CreateViewDesc(String viewName, List<FieldSchema> schema, String comment,
Map<String, String> tblProps, List<String> partColNames,
- boolean ifNotExists, boolean orReplace, boolean isAlterViewAs,
+ boolean ifNotExists, boolean orReplace, boolean rewriteEnabled, boolean isAlterViewAs,
String inputFormat, String outputFormat, String location,
String serde, String storageHandler, Map<String, String> serdeProps) {
this.viewName = viewName;
@@ -89,8 +90,9 @@ public class CreateViewDesc extends DDLDesc implements Serializable {
this.comment = comment;
this.ifNotExists = ifNotExists;
this.orReplace = orReplace;
- this.isAlterViewAs = isAlterViewAs;
this.isMaterialized = true;
+ this.rewriteEnabled = rewriteEnabled;
+ this.isAlterViewAs = isAlterViewAs;
this.inputFormat = inputFormat;
this.outputFormat = outputFormat;
this.location = location;
@@ -126,6 +128,7 @@ public class CreateViewDesc extends DDLDesc implements Serializable {
this.orReplace = orReplace;
this.isAlterViewAs = isAlterViewAs;
this.isMaterialized = false;
+ this.rewriteEnabled = false;
this.inputFormat = inputFormat;
this.outputFormat = outputFormat;
this.serde = serde;
@@ -158,6 +161,15 @@ public class CreateViewDesc extends DDLDesc implements Serializable {
this.expandedText = expandedText;
}
+ @Explain(displayName = "rewrite enabled")
+ public boolean isRewriteEnabled() {
+ return rewriteEnabled;
+ }
+
+ public void setRewriteEnabled(boolean rewriteEnabled) {
+ this.rewriteEnabled = rewriteEnabled;
+ }
+
@Explain(displayName = "columns")
public List<String> getSchemaString() {
return Utilities.getFieldSchemaString(schema);
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java b/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java
index 71aea3a..453e0a5 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java
@@ -42,11 +42,8 @@ import java.util.UUID;
import java.util.concurrent.CancellationException;
import java.util.concurrent.locks.ReentrantLock;
-import com.google.common.collect.Maps;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.ArrayUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
@@ -89,9 +86,12 @@ import org.apache.hadoop.hive.shims.HadoopShims;
import org.apache.hadoop.hive.shims.ShimLoader;
import org.apache.hadoop.hive.shims.Utils;
import org.apache.hadoop.security.UserGroupInformation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
+import com.google.common.collect.Maps;
/**
* SessionState encapsulates common data associated with a session.
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/test/org/apache/hadoop/hive/ql/metadata/TestHive.java
----------------------------------------------------------------------
diff --git a/ql/src/test/org/apache/hadoop/hive/ql/metadata/TestHive.java b/ql/src/test/org/apache/hadoop/hive/ql/metadata/TestHive.java
index 42c715e..ccc0f9c 100755
--- a/ql/src/test/org/apache/hadoop/hive/ql/metadata/TestHive.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/metadata/TestHive.java
@@ -169,6 +169,8 @@ public class TestHive extends TestCase {
tbl.setSerializationLib(LazySimpleSerDe.class.getName());
tbl.setStoredAsSubDirectories(false);
+ tbl.setRewriteEnabled(false);
+
// create table
setNullCreateTableGrants();
try {
@@ -228,6 +230,8 @@ public class TestHive extends TestCase {
.getName());
tbl.setStoredAsSubDirectories(false);
+ tbl.setRewriteEnabled(false);
+
setNullCreateTableGrants();
try {
hm.createTable(tbl);
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/test/queries/clientpositive/materialized_view_create_rewrite.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientpositive/materialized_view_create_rewrite.q b/ql/src/test/queries/clientpositive/materialized_view_create_rewrite.q
new file mode 100644
index 0000000..e95a868
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/materialized_view_create_rewrite.q
@@ -0,0 +1,59 @@
+set hive.strict.checks.cartesian.product=false;
+set hive.materializedview.rewriting=true;
+set hive.stats.column.autogather=true;
+
+create table cmv_basetable (a int, b varchar(256), c decimal(10,2), d int);
+
+insert into cmv_basetable values
+ (1, 'alfred', 10.30, 2),
+ (2, 'bob', 3.14, 3),
+ (2, 'bonnie', 172342.2, 3),
+ (3, 'calvin', 978.76, 3),
+ (3, 'charlie', 9.8, 1);
+
+create materialized view cmv_mat_view enable rewrite
+as select a, b, c from cmv_basetable where a = 2;
+
+select * from cmv_mat_view;
+
+show tblproperties cmv_mat_view;
+
+create materialized view if not exists cmv_mat_view2 enable rewrite
+as select a, c from cmv_basetable where a = 3;
+
+select * from cmv_mat_view2;
+
+show tblproperties cmv_mat_view2;
+
+explain
+select a, c from cmv_basetable where a = 3;
+
+select a, c from cmv_basetable where a = 3;
+
+explain
+select * from (
+ (select a, c from cmv_basetable where a = 3) table1
+ join
+ (select a, c from cmv_basetable where d = 3) table2
+ on table1.a = table2.a);
+
+select * from (
+ (select a, c from cmv_basetable where a = 3) table1
+ join
+ (select a, c from cmv_basetable where d = 3) table2
+ on table1.a = table2.a);
+
+drop materialized view cmv_mat_view2;
+
+explain
+select * from (
+ (select a, c from cmv_basetable where a = 3) table1
+ join
+ (select a, c from cmv_basetable where d = 3) table2
+ on table1.a = table2.a);
+
+select * from (
+ (select a, c from cmv_basetable where a = 3) table1
+ join
+ (select a, c from cmv_basetable where d = 3) table2
+ on table1.a = table2.a);
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/test/queries/clientpositive/materialized_view_create_rewrite_multi_db.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientpositive/materialized_view_create_rewrite_multi_db.q b/ql/src/test/queries/clientpositive/materialized_view_create_rewrite_multi_db.q
new file mode 100644
index 0000000..e4cdc22
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/materialized_view_create_rewrite_multi_db.q
@@ -0,0 +1,40 @@
+set hive.strict.checks.cartesian.product=false;
+set hive.materializedview.rewriting=true;
+set hive.stats.column.autogather=true;
+
+create database db1;
+use db1;
+
+create table cmv_basetable (a int, b varchar(256), c decimal(10,2), d int);
+
+insert into cmv_basetable values
+ (1, 'alfred', 10.30, 2),
+ (2, 'bob', 3.14, 3),
+ (2, 'bonnie', 172342.2, 3),
+ (3, 'calvin', 978.76, 3),
+ (3, 'charlie', 9.8, 1);
+
+create database db2;
+use db2;
+
+create materialized view cmv_mat_view enable rewrite
+as select a, b, c from db1.cmv_basetable where a = 2;
+
+select * from cmv_mat_view;
+
+show tblproperties cmv_mat_view;
+
+create materialized view if not exists cmv_mat_view2 enable rewrite
+as select a, c from db1.cmv_basetable where a = 3;
+
+select * from cmv_mat_view2;
+
+show tblproperties cmv_mat_view2;
+
+create database db3;
+use db3;
+
+explain
+select a, c from db1.cmv_basetable where a = 3;
+
+select a, c from db1.cmv_basetable where a = 3;
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/test/results/clientnegative/alter_view_as_select_with_partition.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientnegative/alter_view_as_select_with_partition.q.out b/ql/src/test/results/clientnegative/alter_view_as_select_with_partition.q.out
index 4e43819..adbc7a8 100644
--- a/ql/src/test/results/clientnegative/alter_view_as_select_with_partition.q.out
+++ b/ql/src/test/results/clientnegative/alter_view_as_select_with_partition.q.out
@@ -69,5 +69,6 @@ View Original Text: SELECT key, value
View Expanded Text: SELECT `src`.`key`, `src`.`value`
FROM `default`.`src`
WHERE `src`.`key`=86
+View Rewrite Enabled: No
FAILED: SemanticException [Error 10217]: Cannot replace a view with CREATE VIEW or REPLACE VIEW or ALTER VIEW AS SELECT if the view has partitions
The following view has partition, it could not be replaced: default.testViewPart
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/test/results/clientpositive/alter_view_as_select.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/alter_view_as_select.q.out b/ql/src/test/results/clientpositive/alter_view_as_select.q.out
index dc1814e..9cbaa24 100644
--- a/ql/src/test/results/clientpositive/alter_view_as_select.q.out
+++ b/ql/src/test/results/clientpositive/alter_view_as_select.q.out
@@ -47,6 +47,7 @@ Sort Columns: []
# View Information
View Original Text: SELECT * FROM srcpart
View Expanded Text: SELECT `srcpart`.`key`, `srcpart`.`value`, `srcpart`.`ds`, `srcpart`.`hr` FROM `default`.`srcpart`
+View Rewrite Enabled: No
PREHOOK: query: ALTER VIEW tv.testView AS SELECT value FROM src WHERE key=86
PREHOOK: type: CREATEVIEW
PREHOOK: Input: default@src
@@ -87,6 +88,7 @@ Sort Columns: []
# View Information
View Original Text: SELECT value FROM src WHERE key=86
View Expanded Text: SELECT `src`.`value` FROM `default`.`src` WHERE `src`.`key`=86
+View Rewrite Enabled: No
PREHOOK: query: ALTER VIEW tv.testView AS
SELECT * FROM src
WHERE key > 80 AND key < 100
@@ -142,6 +144,7 @@ View Expanded Text: SELECT `src`.`key`, `src`.`value` FROM `default`.`src`
WHERE `src`.`key` > 80 AND `src`.`key` < 100
ORDER BY `src`.`key`, `src`.`value`
LIMIT 10
+View Rewrite Enabled: No
PREHOOK: query: DROP VIEW tv.testView
PREHOOK: type: DROPVIEW
PREHOOK: Input: tv@testview
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/test/results/clientpositive/create_or_replace_view.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/create_or_replace_view.q.out b/ql/src/test/results/clientpositive/create_or_replace_view.q.out
index f6f26d2..834cdf0 100644
--- a/ql/src/test/results/clientpositive/create_or_replace_view.q.out
+++ b/ql/src/test/results/clientpositive/create_or_replace_view.q.out
@@ -47,6 +47,7 @@ Sort Columns: []
# View Information
View Original Text: select * from srcpart
View Expanded Text: select `srcpart`.`key`, `srcpart`.`value`, `srcpart`.`ds`, `srcpart`.`hr` from `default`.`srcpart`
+View Rewrite Enabled: No
PREHOOK: query: -- modifying definition of unpartitioned view
create or replace view vt.v partitioned on (ds, hr) as select * from srcpart
PREHOOK: type: CREATEVIEW
@@ -137,6 +138,7 @@ Sort Columns: []
# View Information
View Original Text: select * from srcpart
View Expanded Text: select `srcpart`.`key`, `srcpart`.`value`, `srcpart`.`ds`, `srcpart`.`hr` from `default`.`srcpart`
+View Rewrite Enabled: No
PREHOOK: query: show partitions vt.v
PREHOOK: type: SHOWPARTITIONS
PREHOOK: Input: vt@v
@@ -230,6 +232,7 @@ Sort Columns: []
# View Information
View Original Text: select value, ds, hr from srcpart
View Expanded Text: select `srcpart`.`value`, `srcpart`.`ds`, `srcpart`.`hr` from `default`.`srcpart`
+View Rewrite Enabled: No
PREHOOK: query: show partitions vt.v
PREHOOK: type: SHOWPARTITIONS
PREHOOK: Input: vt@v
@@ -300,6 +303,7 @@ Sort Columns: []
# View Information
View Original Text: select key, value, ds, hr from srcpart
View Expanded Text: select `srcpart`.`key`, `srcpart`.`value`, `srcpart`.`ds`, `srcpart`.`hr` from `default`.`srcpart`
+View Rewrite Enabled: No
PREHOOK: query: show partitions vt.v
PREHOOK: type: SHOWPARTITIONS
PREHOOK: Input: vt@v
@@ -391,6 +395,7 @@ Sort Columns: []
# View Information
View Original Text: select * from srcpart
View Expanded Text: select `srcpart`.`key`, `srcpart`.`value`, `srcpart`.`ds`, `srcpart`.`hr` from `default`.`srcpart`
+View Rewrite Enabled: No
PREHOOK: query: drop view vt.v
PREHOOK: type: DROPVIEW
PREHOOK: Input: vt@v
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/test/results/clientpositive/create_view.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/create_view.q.out b/ql/src/test/results/clientpositive/create_view.q.out
index 12457b4..26b15e2 100644
--- a/ql/src/test/results/clientpositive/create_view.q.out
+++ b/ql/src/test/results/clientpositive/create_view.q.out
@@ -171,6 +171,7 @@ STAGE PLANS:
expanded text: SELECT `_c0` AS `valoo` FROM (SELECT upper(`src`.`value`) FROM `default`.`src` WHERE `src`.`key`=86) `default.view0`
name: default.view0
original text: SELECT upper(value) FROM src WHERE key=86
+ rewrite enabled: false
PREHOOK: query: -- make sure EXPLAIN works with a query which references a view
EXPLAIN
@@ -269,6 +270,7 @@ Sort Columns: []
# View Information
View Original Text: SELECT value FROM src WHERE key=86
View Expanded Text: SELECT `src`.`value` FROM `default`.`src` WHERE `src`.`key`=86
+View Rewrite Enabled: No
PREHOOK: query: DESCRIBE view2
PREHOOK: type: DESCTABLE
PREHOOK: Input: default@view2
@@ -318,6 +320,7 @@ Sort Columns: []
# View Information
View Original Text: SELECT * FROM src
View Expanded Text: SELECT `src`.`key`, `src`.`value` FROM `default`.`src`
+View Rewrite Enabled: No
PREHOOK: query: DESCRIBE view3
PREHOOK: type: DESCTABLE
PREHOOK: Input: default@view3
@@ -365,6 +368,7 @@ Sort Columns: []
# View Information
View Original Text: SELECT upper(value) FROM src WHERE key=86
View Expanded Text: SELECT `_c0` AS `valoo` FROM (SELECT upper(`src`.`value`) FROM `default`.`src` WHERE `src`.`key`=86) `default.view3`
+View Rewrite Enabled: No
PREHOOK: query: ALTER VIEW view3 SET TBLPROPERTIES ("biggest" = "loser")
PREHOOK: type: ALTERVIEW_PROPERTIES
PREHOOK: Input: default@view3
@@ -414,6 +418,7 @@ Sort Columns: []
# View Information
View Original Text: SELECT upper(value) FROM src WHERE key=86
View Expanded Text: SELECT `_c0` AS `valoo` FROM (SELECT upper(`src`.`value`) FROM `default`.`src` WHERE `src`.`key`=86) `default.view3`
+View Rewrite Enabled: No
PREHOOK: query: CREATE TABLE table1 (key int)
PREHOOK: type: CREATETABLE
PREHOOK: Output: database:default
@@ -745,7 +750,7 @@ c string
#### A masked pattern was here ####
FROM table1, viewExpandedText:SELECT `_c0` AS `c` FROM (SELECT `test_translate`('abc', 'a', 'b')
-FROM `default`.`table1`) `default.view8`, tableType:VIRTUAL_VIEW)
+FROM `default`.`table1`) `default.view8`, tableType:VIRTUAL_VIEW, rewriteEnabled:false)
PREHOOK: query: DESCRIBE FORMATTED view8
PREHOOK: type: DESCTABLE
PREHOOK: Input: default@view8
@@ -778,6 +783,7 @@ View Original Text: SELECT test_translate('abc', 'a', 'b')
FROM table1
View Expanded Text: SELECT `_c0` AS `c` FROM (SELECT `test_translate`('abc', 'a', 'b')
FROM `default`.`table1`) `default.view8`
+View Rewrite Enabled: No
PREHOOK: query: SELECT * FROM view8
PREHOOK: type: QUERY
PREHOOK: Input: default@table1
@@ -825,7 +831,7 @@ m int
#### A masked pattern was here ####
FROM src, viewExpandedText:SELECT `_c0` AS `m` FROM (SELECT `test_max`(length(`src`.`value`))
-FROM `default`.`src`) `default.view9`, tableType:VIRTUAL_VIEW)
+FROM `default`.`src`) `default.view9`, tableType:VIRTUAL_VIEW, rewriteEnabled:false)
PREHOOK: query: DESCRIBE FORMATTED view9
PREHOOK: type: DESCTABLE
PREHOOK: Input: default@view9
@@ -858,6 +864,7 @@ View Original Text: SELECT test_max(length(value))
FROM src
View Expanded Text: SELECT `_c0` AS `m` FROM (SELECT `test_max`(length(`src`.`value`))
FROM `default`.`src`) `default.view9`
+View Rewrite Enabled: No
PREHOOK: query: SELECT * FROM view9
PREHOOK: type: QUERY
PREHOOK: Input: default@src
@@ -903,7 +910,7 @@ m int
#### A masked pattern was here ####
FROM src, viewExpandedText:SELECT `_c0` AS `m` FROM (SELECT `test_max`(length(`src`.`value`))
-FROM `default`.`src`) `default.view9`, tableType:VIRTUAL_VIEW)
+FROM `default`.`src`) `default.view9`, tableType:VIRTUAL_VIEW, rewriteEnabled:false)
PREHOOK: query: DESCRIBE FORMATTED view9
PREHOOK: type: DESCTABLE
PREHOOK: Input: default@view9
@@ -936,6 +943,7 @@ View Original Text: SELECT test_max(length(value))
FROM src
View Expanded Text: SELECT `_c0` AS `m` FROM (SELECT `test_max`(length(`src`.`value`))
FROM `default`.`src`) `default.view9`
+View Rewrite Enabled: No
PREHOOK: query: SELECT * FROM view9
PREHOOK: type: QUERY
PREHOOK: Input: default@src
@@ -1002,6 +1010,7 @@ Sort Columns: []
# View Information
View Original Text: SELECT slurp.* FROM (SELECT * FROM src WHERE key=86) slurp
View Expanded Text: SELECT `slurp`.`key`, `slurp`.`value` FROM (SELECT `src`.`key`, `src`.`value` FROM `default`.`src` WHERE `src`.`key`=86) `slurp`
+View Rewrite Enabled: No
PREHOOK: query: SELECT * FROM view10
PREHOOK: type: QUERY
PREHOOK: Input: default@src
@@ -1047,7 +1056,7 @@ boom int
#### A masked pattern was here ####
FROM table1, viewExpandedText:SELECT `test_explode`(array(1,2,3)) AS (`boom`)
-FROM `default`.`table1`, tableType:VIRTUAL_VIEW)
+FROM `default`.`table1`, tableType:VIRTUAL_VIEW, rewriteEnabled:false)
PREHOOK: query: DESCRIBE FORMATTED view11
PREHOOK: type: DESCTABLE
PREHOOK: Input: default@view11
@@ -1080,6 +1089,7 @@ View Original Text: SELECT test_explode(array(1,2,3)) AS (boom)
FROM table1
View Expanded Text: SELECT `test_explode`(array(1,2,3)) AS (`boom`)
FROM `default`.`table1`
+View Rewrite Enabled: No
PREHOOK: query: SELECT * FROM view11
PREHOOK: type: QUERY
PREHOOK: Input: default@table1
@@ -1150,6 +1160,7 @@ Sort Columns: []
# View Information
View Original Text: SELECT * FROM src LATERAL VIEW explode(array(1,2,3)) myTable AS myCol
View Expanded Text: SELECT `src`.`key`, `src`.`value`, `mytable`.`mycol` FROM `default`.`src` LATERAL VIEW explode(array(1,2,3)) `myTable` AS `myCol`
+View Rewrite Enabled: No
PREHOOK: query: SELECT * FROM view12
ORDER BY key ASC, myCol ASC LIMIT 1
PREHOOK: type: QUERY
@@ -1204,7 +1215,7 @@ key int
#### A masked pattern was here ####
FROM srcbucket TABLESAMPLE (BUCKET 1 OUT OF 5 ON key) s, viewExpandedText:SELECT `s`.`key`
-FROM `default`.`srcbucket` TABLESAMPLE (BUCKET 1 OUT OF 5 ON `key`) `s`, tableType:VIRTUAL_VIEW)
+FROM `default`.`srcbucket` TABLESAMPLE (BUCKET 1 OUT OF 5 ON `key`) `s`, tableType:VIRTUAL_VIEW, rewriteEnabled:false)
PREHOOK: query: DESCRIBE FORMATTED view13
PREHOOK: type: DESCTABLE
PREHOOK: Input: default@view13
@@ -1237,6 +1248,7 @@ View Original Text: SELECT s.key
FROM srcbucket TABLESAMPLE (BUCKET 1 OUT OF 5 ON key) s
View Expanded Text: SELECT `s`.`key`
FROM `default`.`srcbucket` TABLESAMPLE (BUCKET 1 OUT OF 5 ON `key`) `s`
+View Rewrite Enabled: No
PREHOOK: query: SELECT * FROM view13
ORDER BY key LIMIT 12
PREHOOK: type: QUERY
@@ -1322,7 +1334,7 @@ JOIN
(select 'tst1' as `key`, cast(count(1) as string) as `value` from `default`.`src` `s3`
UNION ALL
select `s4`.`key` as `key`, `s4`.`value` as `value` from `default`.`src` `s4` where `s4`.`key` < 10) `unionsrc2`
-ON (`unionsrc1`.`key` = `unionsrc2`.`key`), tableType:VIRTUAL_VIEW)
+ON (`unionsrc1`.`key` = `unionsrc2`.`key`), tableType:VIRTUAL_VIEW, rewriteEnabled:false)
PREHOOK: query: DESCRIBE FORMATTED view14
PREHOOK: type: DESCTABLE
PREHOOK: Input: default@view14
@@ -1374,6 +1386,7 @@ View Expanded Text: SELECT `unionsrc1`.`key` as `k1`, `unionsrc1`.`value` as `v
UNION ALL
select `s4`.`key` as `key`, `s4`.`value` as `value` from `default`.`src` `s4` where `s4`.`key` < 10) `unionsrc2`
ON (`unionsrc1`.`key` = `unionsrc2`.`key`)
+View Rewrite Enabled: No
PREHOOK: query: SELECT * FROM view14
ORDER BY k1
PREHOOK: type: QUERY
@@ -1440,7 +1453,7 @@ value_count bigint
FROM src
GROUP BY key, viewExpandedText:SELECT `src`.`key`,COUNT(`src`.`value`) AS `value_count`
FROM `default`.`src`
-GROUP BY `src`.`key`, tableType:VIRTUAL_VIEW)
+GROUP BY `src`.`key`, tableType:VIRTUAL_VIEW, rewriteEnabled:false)
PREHOOK: query: DESCRIBE FORMATTED view15
PREHOOK: type: DESCTABLE
PREHOOK: Input: default@view15
@@ -1476,6 +1489,7 @@ View Original Text: SELECT key,COUNT(value) AS value_count
View Expanded Text: SELECT `src`.`key`,COUNT(`src`.`value`) AS `value_count`
FROM `default`.`src`
GROUP BY `src`.`key`
+View Rewrite Enabled: No
PREHOOK: query: SELECT * FROM view15
ORDER BY value_count DESC, key
LIMIT 10
@@ -1526,7 +1540,7 @@ value string
#### A masked pattern was here ####
FROM src, viewExpandedText:SELECT DISTINCT `src`.`value`
-FROM `default`.`src`, tableType:VIRTUAL_VIEW)
+FROM `default`.`src`, tableType:VIRTUAL_VIEW, rewriteEnabled:false)
PREHOOK: query: DESCRIBE FORMATTED view16
PREHOOK: type: DESCTABLE
PREHOOK: Input: default@view16
@@ -1559,6 +1573,7 @@ View Original Text: SELECT DISTINCT value
FROM src
View Expanded Text: SELECT DISTINCT `src`.`value`
FROM `default`.`src`
+View Rewrite Enabled: No
PREHOOK: query: SELECT * FROM view16
ORDER BY value
LIMIT 10
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/test/results/clientpositive/create_view_defaultformats.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/create_view_defaultformats.q.out b/ql/src/test/results/clientpositive/create_view_defaultformats.q.out
index dbc4a20..2412513 100644
--- a/ql/src/test/results/clientpositive/create_view_defaultformats.q.out
+++ b/ql/src/test/results/clientpositive/create_view_defaultformats.q.out
@@ -57,6 +57,7 @@ Sort Columns: []
# View Information
View Original Text: select * from src
View Expanded Text: select `src`.`key`, `src`.`value` from `default`.`src`
+View Rewrite Enabled: No
PREHOOK: query: describe formatted rcsrc
PREHOOK: type: DESCTABLE
PREHOOK: Input: default@rcsrc
@@ -88,6 +89,7 @@ Sort Columns: []
# View Information
View Original Text: select * from src
View Expanded Text: select `src`.`key`, `src`.`value` from `default`.`src`
+View Rewrite Enabled: No
PREHOOK: query: select * from sfsrc where key = 100 limit 1
PREHOOK: type: QUERY
PREHOOK: Input: default@sfsrc
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/test/results/clientpositive/create_view_partitioned.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/create_view_partitioned.q.out b/ql/src/test/results/clientpositive/create_view_partitioned.q.out
index 4373303..1be3556 100644
--- a/ql/src/test/results/clientpositive/create_view_partitioned.q.out
+++ b/ql/src/test/results/clientpositive/create_view_partitioned.q.out
@@ -52,7 +52,7 @@ value string
FROM src
WHERE key=86, viewExpandedText:SELECT `src`.`key`, `src`.`value`
FROM `default`.`src`
-WHERE `src`.`key`=86, tableType:VIRTUAL_VIEW)
+WHERE `src`.`key`=86, tableType:VIRTUAL_VIEW, rewriteEnabled:false)
PREHOOK: query: DESCRIBE FORMATTED vp1
PREHOOK: type: DESCTABLE
PREHOOK: Input: default@vp1
@@ -92,6 +92,7 @@ View Original Text: SELECT key, value
View Expanded Text: SELECT `src`.`key`, `src`.`value`
FROM `default`.`src`
WHERE `src`.`key`=86
+View Rewrite Enabled: No
PREHOOK: query: SELECT * FROM vp1
PREHOOK: type: QUERY
PREHOOK: Input: default@src
@@ -295,6 +296,7 @@ Sort Columns: []
# View Information
View Original Text: SELECT * FROM srcpart WHERE key < 10
View Expanded Text: SELECT `srcpart`.`key`, `srcpart`.`value`, `srcpart`.`ds`, `srcpart`.`hr` FROM `default`.`srcpart` WHERE `srcpart`.`key` < 10
+View Rewrite Enabled: No
PREHOOK: query: ALTER VIEW vp2 ADD PARTITION (hr='11') PARTITION (hr='12')
PREHOOK: type: ALTERTABLE_ADDPARTS
PREHOOK: Input: default@srcpart
@@ -412,6 +414,7 @@ View Original Text: SELECT key, value
View Expanded Text: SELECT `key` AS `k`, `value` AS `v` FROM (SELECT `src`.`key`, `src`.`value`
FROM `default`.`src`
WHERE `src`.`key`=86) `default.vp3`
+View Rewrite Enabled: No
PREHOOK: query: ALTER VIEW vp3
ADD PARTITION (v='val_86')
PREHOOK: type: ALTERTABLE_ADDPARTS
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/test/results/clientpositive/create_view_translate.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/create_view_translate.q.out b/ql/src/test/results/clientpositive/create_view_translate.q.out
index 43b9062..cb7402c 100644
--- a/ql/src/test/results/clientpositive/create_view_translate.q.out
+++ b/ql/src/test/results/clientpositive/create_view_translate.q.out
@@ -46,6 +46,7 @@ Sort Columns: []
# View Information
View Original Text: select cast(key as string) from src
View Expanded Text: select `src`.`key` from `default`.`src`
+View Rewrite Enabled: No
PREHOOK: query: create view w as select key, value from (
select key, value from src
) a
@@ -95,6 +96,7 @@ View Original Text: select key, value from (
View Expanded Text: select `a`.`key`, `a`.`value` from (
select `src`.`key`, `src`.`value` from `default`.`src`
) `a`
+View Rewrite Enabled: No
PREHOOK: query: drop view v
PREHOOK: type: DROPVIEW
PREHOOK: Input: default@v
@@ -141,6 +143,7 @@ STAGE PLANS:
expanded text: SELECT `items`.`id`, `items`.`info`['price'] FROM `default`.`items`
name: default.priceview
original text: SELECT items.id, items.info['price'] FROM items
+ rewrite enabled: false
PREHOOK: query: CREATE VIEW priceview AS SELECT items.id, items.info['price'] FROM items
PREHOOK: type: CREATEVIEW
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/test/results/clientpositive/cteViews.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/cteViews.q.out b/ql/src/test/results/clientpositive/cteViews.q.out
index eb3cfc0..69f0a91 100644
--- a/ql/src/test/results/clientpositive/cteViews.q.out
+++ b/ql/src/test/results/clientpositive/cteViews.q.out
@@ -45,7 +45,7 @@ key string
#### A masked pattern was here ####
select key from cte, viewExpandedText:with cte as (select `src`.`key`, `src`.`value` from `default`.`src` order by key limit 5)
-select `cte`.`key` from cte, tableType:VIRTUAL_VIEW)
+select `cte`.`key` from cte, tableType:VIRTUAL_VIEW, rewriteEnabled:false)
PREHOOK: query: create database bug
PREHOOK: type: CREATEDATABASE
PREHOOK: Output: database:bug
@@ -118,7 +118,7 @@ value string
#### A masked pattern was here ####
select * from cte, viewExpandedText:with cte as (select `src`.`key`, `src`.`value` from `default`.`src` order by `src`.`key` limit 5)
-select `cte`.`key`, `cte`.`value` from cte, tableType:VIRTUAL_VIEW)
+select `cte`.`key`, `cte`.`value` from cte, tableType:VIRTUAL_VIEW, rewriteEnabled:false)
PREHOOK: query: create database bug
PREHOOK: type: CREATEDATABASE
PREHOOK: Output: database:bug
@@ -190,7 +190,7 @@ key string
#### A masked pattern was here ####
select * from src1, viewExpandedText:with src1 as (select `src`.`key` from `default`.`src` order by key limit 5)
-select `src1`.`key` from src1, tableType:VIRTUAL_VIEW)
+select `src1`.`key` from src1, tableType:VIRTUAL_VIEW, rewriteEnabled:false)
PREHOOK: query: create database bug
PREHOOK: type: CREATEDATABASE
PREHOOK: Output: database:bug
@@ -254,7 +254,7 @@ key string
#### A masked pattern was here ####
select * from src1 a where a.key is not null, viewExpandedText:with src1 as (select `src`.`key` from `default`.`src` order by key limit 5)
-select `a`.`key` from src1 a where `a`.`key` is not null, tableType:VIRTUAL_VIEW)
+select `a`.`key` from src1 a where `a`.`key` is not null, tableType:VIRTUAL_VIEW, rewriteEnabled:false)
PREHOOK: query: select * from v
PREHOOK: type: QUERY
PREHOOK: Input: default@src
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/test/results/clientpositive/escape_comments.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/escape_comments.q.out b/ql/src/test/results/clientpositive/escape_comments.q.out
index 0b8c5c5..ff5a1ed 100644
--- a/ql/src/test/results/clientpositive/escape_comments.q.out
+++ b/ql/src/test/results/clientpositive/escape_comments.q.out
@@ -188,6 +188,7 @@ Sort Columns: []
# View Information
View Original Text: select col1 from escape_comments_tbl1
View Expanded Text: SELECT `col1` AS `col1` FROM (select `escape_comments_tbl1`.`col1` from `escape_comments_db`.`escape_comments_tbl1`) `escape_comments_db.escape_comments_view1`
+View Rewrite Enabled: No
PREHOOK: query: show formatted index on escape_comments_tbl1
PREHOOK: type: SHOWINDEXES
POSTHOOK: query: show formatted index on escape_comments_tbl1
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/test/results/clientpositive/explain_ddl.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/explain_ddl.q.out b/ql/src/test/results/clientpositive/explain_ddl.q.out
index e8438a1..2b89f28 100644
--- a/ql/src/test/results/clientpositive/explain_ddl.q.out
+++ b/ql/src/test/results/clientpositive/explain_ddl.q.out
@@ -432,6 +432,7 @@ STAGE PLANS:
expanded text: select `m1`.`key`, `m1`.`value` from `default`.`M1`
name: default.V1
original text: select * from M1
+ rewrite enabled: false
PREHOOK: query: EXPLAIN CREATE TABLE M1 LIKE src
PREHOOK: type: CREATETABLE
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/test/results/clientpositive/llap/cbo_rp_unionDistinct_2.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/cbo_rp_unionDistinct_2.q.out b/ql/src/test/results/clientpositive/llap/cbo_rp_unionDistinct_2.q.out
index 304d74f..10609d9 100644
--- a/ql/src/test/results/clientpositive/llap/cbo_rp_unionDistinct_2.q.out
+++ b/ql/src/test/results/clientpositive/llap/cbo_rp_unionDistinct_2.q.out
@@ -365,7 +365,7 @@ union
select `u2`.`key`, `u2`.`value` from `default`.`u2`
union all
select `u3`.`key` as `key`, `u3`.`value` from `default`.`u3`
-) `tab`, tableType:VIRTUAL_VIEW)
+) `tab`, tableType:VIRTUAL_VIEW, rewriteEnabled:false)
PREHOOK: query: select * from v
PREHOOK: type: QUERY
PREHOOK: Input: default@u1
@@ -435,7 +435,7 @@ select distinct * from u2
select distinct `u1`.`key`, `u1`.`value` from `default`.`u1`
union
select distinct `u2`.`key`, `u2`.`value` from `default`.`u2`
-) `tab`, tableType:VIRTUAL_VIEW)
+) `tab`, tableType:VIRTUAL_VIEW, rewriteEnabled:false)
PREHOOK: query: select * from v
PREHOOK: type: QUERY
PREHOOK: Input: default@u1
@@ -500,7 +500,7 @@ select distinct * from u2
select distinct `u1`.`key`, `u1`.`value` from `default`.`u1`
union all
select distinct `u2`.`key`, `u2`.`value` from `default`.`u2`
-) `tab`, tableType:VIRTUAL_VIEW)
+) `tab`, tableType:VIRTUAL_VIEW, rewriteEnabled:false)
PREHOOK: query: select * from v
PREHOOK: type: QUERY
PREHOOK: Input: default@u1
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/test/results/clientpositive/llap/selectDistinctStar.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/selectDistinctStar.q.out b/ql/src/test/results/clientpositive/llap/selectDistinctStar.q.out
index 985086d..2eff533 100644
--- a/ql/src/test/results/clientpositive/llap/selectDistinctStar.q.out
+++ b/ql/src/test/results/clientpositive/llap/selectDistinctStar.q.out
@@ -1362,6 +1362,7 @@ STAGE PLANS:
expanded text: select distinct `src`.`key`, `src`.`value` from `default`.`src` order by `src`.`key` limit 2
name: default.sdi
original text: select distinct * from src order by key limit 2
+ rewrite enabled: false
PREHOOK: query: create view sdi as select distinct * from src order by key limit 2
PREHOOK: type: CREATEVIEW
@@ -1414,6 +1415,7 @@ Sort Columns: []
# View Information
View Original Text: select distinct * from src order by key limit 2
View Expanded Text: select distinct `src`.`key`, `src`.`value` from `default`.`src` order by `src`.`key` limit 2
+View Rewrite Enabled: No
PREHOOK: query: select * from sdi
PREHOOK: type: QUERY
PREHOOK: Input: default@sdi
@@ -3822,6 +3824,7 @@ STAGE PLANS:
expanded text: select distinct `src`.`key`, `src`.`value` from `default`.`src` order by `src`.`key` limit 2
name: default.sdi
original text: select distinct * from src order by key limit 2
+ rewrite enabled: false
PREHOOK: query: create view sdi as select distinct * from src order by key limit 2
PREHOOK: type: CREATEVIEW
@@ -3874,6 +3877,7 @@ Sort Columns: []
# View Information
View Original Text: select distinct * from src order by key limit 2
View Expanded Text: select distinct `src`.`key`, `src`.`value` from `default`.`src` order by `src`.`key` limit 2
+View Rewrite Enabled: No
PREHOOK: query: select * from sdi
PREHOOK: type: QUERY
PREHOOK: Input: default@sdi
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/test/results/clientpositive/llap/subquery_views.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/subquery_views.q.out b/ql/src/test/results/clientpositive/llap/subquery_views.q.out
index 35e80ae..4cd0485 100644
--- a/ql/src/test/results/clientpositive/llap/subquery_views.q.out
+++ b/ql/src/test/results/clientpositive/llap/subquery_views.q.out
@@ -45,7 +45,7 @@ from `default`.`src` `b`
where exists
(select `a`.`key`
from `default`.`src` `a`
- where `b`.`value` = `a`.`value` and `a`.`key` = `b`.`key` and `a`.`value` > 'val_9'), tableType:VIRTUAL_VIEW)
+ where `b`.`value` = `a`.`value` and `a`.`key` = `b`.`key` and `a`.`value` > 'val_9'), tableType:VIRTUAL_VIEW, rewriteEnabled:false)
PREHOOK: query: select *
from cv1 where cv1.key in (select key from cv1 c where c.key > '95')
PREHOOK: type: QUERY
@@ -110,7 +110,7 @@ where `b`.`key` not in
(select `a`.`key`
from `default`.`src` `a`
where `b`.`value` = `a`.`value` and `a`.`key` = `b`.`key` and `a`.`value` > 'val_11'
- ), tableType:VIRTUAL_VIEW)
+ ), tableType:VIRTUAL_VIEW, rewriteEnabled:false)
Warning: Shuffle Join MERGEJOIN[67][tables = [$hdt$_0, $hdt$_1]] in Stage 'Reducer 2' is a cross product
Warning: Shuffle Join MERGEJOIN[69][tables = [$hdt$_1, $hdt$_2]] in Stage 'Reducer 9' is a cross product
PREHOOK: query: explain
@@ -465,7 +465,7 @@ having count(*) in (select count(*) from src s1 where s1.key > '9' group by s1.k
from `default`.`src` `b`
where `b`.`key` in (select `src`.`key` from `default`.`src` where `src`.`key` > '8')
group by `b`.`key`, `b`.`value`
-having count(*) in (select count(*) from `default`.`src` `s1` where `s1`.`key` > '9' group by `s1`.`key` ), tableType:VIRTUAL_VIEW)
+having count(*) in (select count(*) from `default`.`src` `s1` where `s1`.`key` > '9' group by `s1`.`key` ), tableType:VIRTUAL_VIEW, rewriteEnabled:false)
PREHOOK: query: select * from cv3
PREHOOK: type: QUERY
PREHOOK: Input: default@cv3
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/test/results/clientpositive/llap/unionDistinct_2.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/unionDistinct_2.q.out b/ql/src/test/results/clientpositive/llap/unionDistinct_2.q.out
index 304d74f..10609d9 100644
--- a/ql/src/test/results/clientpositive/llap/unionDistinct_2.q.out
+++ b/ql/src/test/results/clientpositive/llap/unionDistinct_2.q.out
@@ -365,7 +365,7 @@ union
select `u2`.`key`, `u2`.`value` from `default`.`u2`
union all
select `u3`.`key` as `key`, `u3`.`value` from `default`.`u3`
-) `tab`, tableType:VIRTUAL_VIEW)
+) `tab`, tableType:VIRTUAL_VIEW, rewriteEnabled:false)
PREHOOK: query: select * from v
PREHOOK: type: QUERY
PREHOOK: Input: default@u1
@@ -435,7 +435,7 @@ select distinct * from u2
select distinct `u1`.`key`, `u1`.`value` from `default`.`u1`
union
select distinct `u2`.`key`, `u2`.`value` from `default`.`u2`
-) `tab`, tableType:VIRTUAL_VIEW)
+) `tab`, tableType:VIRTUAL_VIEW, rewriteEnabled:false)
PREHOOK: query: select * from v
PREHOOK: type: QUERY
PREHOOK: Input: default@u1
@@ -500,7 +500,7 @@ select distinct * from u2
select distinct `u1`.`key`, `u1`.`value` from `default`.`u1`
union all
select distinct `u2`.`key`, `u2`.`value` from `default`.`u2`
-) `tab`, tableType:VIRTUAL_VIEW)
+) `tab`, tableType:VIRTUAL_VIEW, rewriteEnabled:false)
PREHOOK: query: select * from v
PREHOOK: type: QUERY
PREHOOK: Input: default@u1
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/test/results/clientpositive/llap/union_top_level.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/union_top_level.q.out b/ql/src/test/results/clientpositive/llap/union_top_level.q.out
index b4e4d93..6ea1f7e 100644
--- a/ql/src/test/results/clientpositive/llap/union_top_level.q.out
+++ b/ql/src/test/results/clientpositive/llap/union_top_level.q.out
@@ -1135,6 +1135,7 @@ union all
select * from (select key, 1 as value from src where key % 3 == 1 limit 3)b
union all
select * from (select key, 2 as value from src where key % 3 == 2 limit 3)c
+ rewrite enabled: false
PREHOOK: query: create view union_top_view as
select * from (select key, 0 as value from src where key % 3 == 0 limit 3)a
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/test/results/clientpositive/materialized_view_create_rewrite.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/materialized_view_create_rewrite.q.out b/ql/src/test/results/clientpositive/materialized_view_create_rewrite.q.out
new file mode 100644
index 0000000..041621f
--- /dev/null
+++ b/ql/src/test/results/clientpositive/materialized_view_create_rewrite.q.out
@@ -0,0 +1,322 @@
+PREHOOK: query: create table cmv_basetable (a int, b varchar(256), c decimal(10,2), d int)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@cmv_basetable
+POSTHOOK: query: create table cmv_basetable (a int, b varchar(256), c decimal(10,2), d int)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@cmv_basetable
+PREHOOK: query: insert into cmv_basetable values
+ (1, 'alfred', 10.30, 2),
+ (2, 'bob', 3.14, 3),
+ (2, 'bonnie', 172342.2, 3),
+ (3, 'calvin', 978.76, 3),
+ (3, 'charlie', 9.8, 1)
+PREHOOK: type: QUERY
+PREHOOK: Output: default@cmv_basetable
+POSTHOOK: query: insert into cmv_basetable values
+ (1, 'alfred', 10.30, 2),
+ (2, 'bob', 3.14, 3),
+ (2, 'bonnie', 172342.2, 3),
+ (3, 'calvin', 978.76, 3),
+ (3, 'charlie', 9.8, 1)
+POSTHOOK: type: QUERY
+POSTHOOK: Output: default@cmv_basetable
+POSTHOOK: Lineage: cmv_basetable.a EXPRESSION [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col1, type:string, comment:), ]
+POSTHOOK: Lineage: cmv_basetable.b EXPRESSION [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col2, type:string, comment:), ]
+POSTHOOK: Lineage: cmv_basetable.c EXPRESSION [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col3, type:string, comment:), ]
+POSTHOOK: Lineage: cmv_basetable.d EXPRESSION [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col4, type:string, comment:), ]
+PREHOOK: query: create materialized view cmv_mat_view enable rewrite
+as select a, b, c from cmv_basetable where a = 2
+PREHOOK: type: CREATE_MATERIALIZED_VIEW
+PREHOOK: Input: default@cmv_basetable
+PREHOOK: Output: database:default
+PREHOOK: Output: default@cmv_mat_view
+POSTHOOK: query: create materialized view cmv_mat_view enable rewrite
+as select a, b, c from cmv_basetable where a = 2
+POSTHOOK: type: CREATE_MATERIALIZED_VIEW
+POSTHOOK: Input: default@cmv_basetable
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@cmv_mat_view
+PREHOOK: query: select * from cmv_mat_view
+PREHOOK: type: QUERY
+PREHOOK: Input: default@cmv_mat_view
+#### A masked pattern was here ####
+POSTHOOK: query: select * from cmv_mat_view
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@cmv_mat_view
+#### A masked pattern was here ####
+2 bob 3.14
+2 bonnie 172342.20
+PREHOOK: query: show tblproperties cmv_mat_view
+PREHOOK: type: SHOW_TBLPROPERTIES
+POSTHOOK: query: show tblproperties cmv_mat_view
+POSTHOOK: type: SHOW_TBLPROPERTIES
+numFiles 1
+totalSize 453
+#### A masked pattern was here ####
+PREHOOK: query: create materialized view if not exists cmv_mat_view2 enable rewrite
+as select a, c from cmv_basetable where a = 3
+PREHOOK: type: CREATE_MATERIALIZED_VIEW
+PREHOOK: Input: default@cmv_basetable
+PREHOOK: Output: database:default
+PREHOOK: Output: default@cmv_mat_view2
+POSTHOOK: query: create materialized view if not exists cmv_mat_view2 enable rewrite
+as select a, c from cmv_basetable where a = 3
+POSTHOOK: type: CREATE_MATERIALIZED_VIEW
+POSTHOOK: Input: default@cmv_basetable
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@cmv_mat_view2
+PREHOOK: query: select * from cmv_mat_view2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@cmv_mat_view2
+#### A masked pattern was here ####
+POSTHOOK: query: select * from cmv_mat_view2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@cmv_mat_view2
+#### A masked pattern was here ####
+3 978.76
+3 9.80
+PREHOOK: query: show tblproperties cmv_mat_view2
+PREHOOK: type: SHOW_TBLPROPERTIES
+POSTHOOK: query: show tblproperties cmv_mat_view2
+POSTHOOK: type: SHOW_TBLPROPERTIES
+numFiles 1
+totalSize 322
+#### A masked pattern was here ####
+PREHOOK: query: explain
+select a, c from cmv_basetable where a = 3
+PREHOOK: type: QUERY
+POSTHOOK: query: explain
+select a, c from cmv_basetable where a = 3
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+ Stage-0 is a root stage
+
+STAGE PLANS:
+ Stage: Stage-0
+ Fetch Operator
+ limit: -1
+ Processor Tree:
+ TableScan
+ alias: default.cmv_mat_view2
+ Statistics: Num rows: 2 Data size: 322 Basic stats: COMPLETE Column stats: NONE
+ Select Operator
+ expressions: a (type: int), c (type: decimal(10,2))
+ outputColumnNames: _col0, _col1
+ Statistics: Num rows: 2 Data size: 322 Basic stats: COMPLETE Column stats: NONE
+ ListSink
+
+PREHOOK: query: select a, c from cmv_basetable where a = 3
+PREHOOK: type: QUERY
+PREHOOK: Input: default@cmv_basetable
+PREHOOK: Input: default@cmv_mat_view2
+#### A masked pattern was here ####
+POSTHOOK: query: select a, c from cmv_basetable where a = 3
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@cmv_basetable
+POSTHOOK: Input: default@cmv_mat_view2
+#### A masked pattern was here ####
+3 978.76
+3 9.80
+Warning: Shuffle Join JOIN[7][tables = [$hdt$_0, $hdt$_1]] in Stage 'Stage-1:MAPRED' is a cross product
+PREHOOK: query: explain
+select * from (
+ (select a, c from cmv_basetable where a = 3) table1
+ join
+ (select a, c from cmv_basetable where d = 3) table2
+ on table1.a = table2.a)
+PREHOOK: type: QUERY
+POSTHOOK: query: explain
+select * from (
+ (select a, c from cmv_basetable where a = 3) table1
+ join
+ (select a, c from cmv_basetable where d = 3) table2
+ on table1.a = table2.a)
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+ Stage-1 is a root stage
+ Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+ Stage: Stage-1
+ Map Reduce
+ Map Operator Tree:
+ TableScan
+ alias: default.cmv_mat_view2
+ Statistics: Num rows: 2 Data size: 322 Basic stats: COMPLETE Column stats: NONE
+ Select Operator
+ expressions: c (type: decimal(10,2))
+ outputColumnNames: _col0
+ Statistics: Num rows: 2 Data size: 322 Basic stats: COMPLETE Column stats: NONE
+ Reduce Output Operator
+ sort order:
+ Statistics: Num rows: 2 Data size: 322 Basic stats: COMPLETE Column stats: NONE
+ value expressions: _col0 (type: decimal(10,2))
+ TableScan
+ alias: cmv_basetable
+ Statistics: Num rows: 5 Data size: 81 Basic stats: COMPLETE Column stats: NONE
+ Filter Operator
+ predicate: ((d = 3) and (3 = a)) (type: boolean)
+ Statistics: Num rows: 1 Data size: 16 Basic stats: COMPLETE Column stats: NONE
+ Select Operator
+ expressions: c (type: decimal(10,2))
+ outputColumnNames: _col0
+ Statistics: Num rows: 1 Data size: 16 Basic stats: COMPLETE Column stats: NONE
+ Reduce Output Operator
+ sort order:
+ Statistics: Num rows: 1 Data size: 16 Basic stats: COMPLETE Column stats: NONE
+ value expressions: _col0 (type: decimal(10,2))
+ Reduce Operator Tree:
+ Join Operator
+ condition map:
+ Inner Join 0 to 1
+ keys:
+ 0
+ 1
+ outputColumnNames: _col0, _col1
+ Statistics: Num rows: 2 Data size: 356 Basic stats: COMPLETE Column stats: NONE
+ Select Operator
+ expressions: 3 (type: int), _col0 (type: decimal(10,2)), 3 (type: int), _col1 (type: decimal(10,2))
+ outputColumnNames: _col0, _col1, _col2, _col3
+ Statistics: Num rows: 2 Data size: 356 Basic stats: COMPLETE Column stats: NONE
+ File Output Operator
+ compressed: false
+ Statistics: Num rows: 2 Data size: 356 Basic stats: COMPLETE Column stats: NONE
+ table:
+ input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+ serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+ Stage: Stage-0
+ Fetch Operator
+ limit: -1
+ Processor Tree:
+ ListSink
+
+Warning: Shuffle Join JOIN[7][tables = [$hdt$_0, $hdt$_1]] in Stage 'Stage-1:MAPRED' is a cross product
+PREHOOK: query: select * from (
+ (select a, c from cmv_basetable where a = 3) table1
+ join
+ (select a, c from cmv_basetable where d = 3) table2
+ on table1.a = table2.a)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@cmv_basetable
+PREHOOK: Input: default@cmv_mat_view2
+#### A masked pattern was here ####
+POSTHOOK: query: select * from (
+ (select a, c from cmv_basetable where a = 3) table1
+ join
+ (select a, c from cmv_basetable where d = 3) table2
+ on table1.a = table2.a)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@cmv_basetable
+POSTHOOK: Input: default@cmv_mat_view2
+#### A masked pattern was here ####
+3 9.80 3 978.76
+3 978.76 3 978.76
+PREHOOK: query: drop materialized view cmv_mat_view2
+PREHOOK: type: DROP_MATERIALIZED_VIEW
+PREHOOK: Input: default@cmv_mat_view2
+PREHOOK: Output: default@cmv_mat_view2
+POSTHOOK: query: drop materialized view cmv_mat_view2
+POSTHOOK: type: DROP_MATERIALIZED_VIEW
+POSTHOOK: Input: default@cmv_mat_view2
+POSTHOOK: Output: default@cmv_mat_view2
+Warning: Shuffle Join JOIN[8][tables = [$hdt$_0, $hdt$_1]] in Stage 'Stage-1:MAPRED' is a cross product
+PREHOOK: query: explain
+select * from (
+ (select a, c from cmv_basetable where a = 3) table1
+ join
+ (select a, c from cmv_basetable where d = 3) table2
+ on table1.a = table2.a)
+PREHOOK: type: QUERY
+POSTHOOK: query: explain
+select * from (
+ (select a, c from cmv_basetable where a = 3) table1
+ join
+ (select a, c from cmv_basetable where d = 3) table2
+ on table1.a = table2.a)
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+ Stage-1 is a root stage
+ Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+ Stage: Stage-1
+ Map Reduce
+ Map Operator Tree:
+ TableScan
+ alias: cmv_basetable
+ Statistics: Num rows: 5 Data size: 81 Basic stats: COMPLETE Column stats: NONE
+ Filter Operator
+ predicate: (a = 3) (type: boolean)
+ Statistics: Num rows: 2 Data size: 32 Basic stats: COMPLETE Column stats: NONE
+ Select Operator
+ expressions: c (type: decimal(10,2))
+ outputColumnNames: _col0
+ Statistics: Num rows: 2 Data size: 32 Basic stats: COMPLETE Column stats: NONE
+ Reduce Output Operator
+ sort order:
+ Statistics: Num rows: 2 Data size: 32 Basic stats: COMPLETE Column stats: NONE
+ value expressions: _col0 (type: decimal(10,2))
+ TableScan
+ alias: cmv_basetable
+ Statistics: Num rows: 5 Data size: 81 Basic stats: COMPLETE Column stats: NONE
+ Filter Operator
+ predicate: ((d = 3) and (3 = a)) (type: boolean)
+ Statistics: Num rows: 1 Data size: 16 Basic stats: COMPLETE Column stats: NONE
+ Select Operator
+ expressions: c (type: decimal(10,2))
+ outputColumnNames: _col0
+ Statistics: Num rows: 1 Data size: 16 Basic stats: COMPLETE Column stats: NONE
+ Reduce Output Operator
+ sort order:
+ Statistics: Num rows: 1 Data size: 16 Basic stats: COMPLETE Column stats: NONE
+ value expressions: _col0 (type: decimal(10,2))
+ Reduce Operator Tree:
+ Join Operator
+ condition map:
+ Inner Join 0 to 1
+ keys:
+ 0
+ 1
+ outputColumnNames: _col0, _col1
+ Statistics: Num rows: 2 Data size: 66 Basic stats: COMPLETE Column stats: NONE
+ Select Operator
+ expressions: 3 (type: int), _col0 (type: decimal(10,2)), 3 (type: int), _col1 (type: decimal(10,2))
+ outputColumnNames: _col0, _col1, _col2, _col3
+ Statistics: Num rows: 2 Data size: 66 Basic stats: COMPLETE Column stats: NONE
+ File Output Operator
+ compressed: false
+ Statistics: Num rows: 2 Data size: 66 Basic stats: COMPLETE Column stats: NONE
+ table:
+ input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+ serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+ Stage: Stage-0
+ Fetch Operator
+ limit: -1
+ Processor Tree:
+ ListSink
+
+Warning: Shuffle Join JOIN[8][tables = [$hdt$_0, $hdt$_1]] in Stage 'Stage-1:MAPRED' is a cross product
+PREHOOK: query: select * from (
+ (select a, c from cmv_basetable where a = 3) table1
+ join
+ (select a, c from cmv_basetable where d = 3) table2
+ on table1.a = table2.a)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@cmv_basetable
+#### A masked pattern was here ####
+POSTHOOK: query: select * from (
+ (select a, c from cmv_basetable where a = 3) table1
+ join
+ (select a, c from cmv_basetable where d = 3) table2
+ on table1.a = table2.a)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@cmv_basetable
+#### A masked pattern was here ####
+3 9.80 3 978.76
+3 978.76 3 978.76
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/test/results/clientpositive/materialized_view_create_rewrite_multi_db.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/materialized_view_create_rewrite_multi_db.q.out b/ql/src/test/results/clientpositive/materialized_view_create_rewrite_multi_db.q.out
new file mode 100644
index 0000000..f715803
--- /dev/null
+++ b/ql/src/test/results/clientpositive/materialized_view_create_rewrite_multi_db.q.out
@@ -0,0 +1,157 @@
+PREHOOK: query: create database db1
+PREHOOK: type: CREATEDATABASE
+PREHOOK: Output: database:db1
+POSTHOOK: query: create database db1
+POSTHOOK: type: CREATEDATABASE
+POSTHOOK: Output: database:db1
+PREHOOK: query: use db1
+PREHOOK: type: SWITCHDATABASE
+PREHOOK: Input: database:db1
+POSTHOOK: query: use db1
+POSTHOOK: type: SWITCHDATABASE
+POSTHOOK: Input: database:db1
+PREHOOK: query: create table cmv_basetable (a int, b varchar(256), c decimal(10,2), d int)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:db1
+PREHOOK: Output: db1@cmv_basetable
+POSTHOOK: query: create table cmv_basetable (a int, b varchar(256), c decimal(10,2), d int)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:db1
+POSTHOOK: Output: db1@cmv_basetable
+PREHOOK: query: insert into cmv_basetable values
+ (1, 'alfred', 10.30, 2),
+ (2, 'bob', 3.14, 3),
+ (2, 'bonnie', 172342.2, 3),
+ (3, 'calvin', 978.76, 3),
+ (3, 'charlie', 9.8, 1)
+PREHOOK: type: QUERY
+PREHOOK: Output: db1@cmv_basetable
+POSTHOOK: query: insert into cmv_basetable values
+ (1, 'alfred', 10.30, 2),
+ (2, 'bob', 3.14, 3),
+ (2, 'bonnie', 172342.2, 3),
+ (3, 'calvin', 978.76, 3),
+ (3, 'charlie', 9.8, 1)
+POSTHOOK: type: QUERY
+POSTHOOK: Output: db1@cmv_basetable
+POSTHOOK: Lineage: cmv_basetable.a EXPRESSION [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col1, type:string, comment:), ]
+POSTHOOK: Lineage: cmv_basetable.b EXPRESSION [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col2, type:string, comment:), ]
+POSTHOOK: Lineage: cmv_basetable.c EXPRESSION [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col3, type:string, comment:), ]
+POSTHOOK: Lineage: cmv_basetable.d EXPRESSION [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col4, type:string, comment:), ]
+PREHOOK: query: create database db2
+PREHOOK: type: CREATEDATABASE
+PREHOOK: Output: database:db2
+POSTHOOK: query: create database db2
+POSTHOOK: type: CREATEDATABASE
+POSTHOOK: Output: database:db2
+PREHOOK: query: use db2
+PREHOOK: type: SWITCHDATABASE
+PREHOOK: Input: database:db2
+POSTHOOK: query: use db2
+POSTHOOK: type: SWITCHDATABASE
+POSTHOOK: Input: database:db2
+PREHOOK: query: create materialized view cmv_mat_view enable rewrite
+as select a, b, c from db1.cmv_basetable where a = 2
+PREHOOK: type: CREATE_MATERIALIZED_VIEW
+PREHOOK: Input: db1@cmv_basetable
+PREHOOK: Output: database:db2
+PREHOOK: Output: db2@cmv_mat_view
+POSTHOOK: query: create materialized view cmv_mat_view enable rewrite
+as select a, b, c from db1.cmv_basetable where a = 2
+POSTHOOK: type: CREATE_MATERIALIZED_VIEW
+POSTHOOK: Input: db1@cmv_basetable
+POSTHOOK: Output: database:db2
+POSTHOOK: Output: db2@cmv_mat_view
+PREHOOK: query: select * from cmv_mat_view
+PREHOOK: type: QUERY
+PREHOOK: Input: db2@cmv_mat_view
+#### A masked pattern was here ####
+POSTHOOK: query: select * from cmv_mat_view
+POSTHOOK: type: QUERY
+POSTHOOK: Input: db2@cmv_mat_view
+#### A masked pattern was here ####
+2 bob 3.14
+2 bonnie 172342.20
+PREHOOK: query: show tblproperties cmv_mat_view
+PREHOOK: type: SHOW_TBLPROPERTIES
+POSTHOOK: query: show tblproperties cmv_mat_view
+POSTHOOK: type: SHOW_TBLPROPERTIES
+numFiles 1
+totalSize 453
+#### A masked pattern was here ####
+PREHOOK: query: create materialized view if not exists cmv_mat_view2 enable rewrite
+as select a, c from db1.cmv_basetable where a = 3
+PREHOOK: type: CREATE_MATERIALIZED_VIEW
+PREHOOK: Input: db1@cmv_basetable
+PREHOOK: Output: database:db2
+PREHOOK: Output: db2@cmv_mat_view2
+POSTHOOK: query: create materialized view if not exists cmv_mat_view2 enable rewrite
+as select a, c from db1.cmv_basetable where a = 3
+POSTHOOK: type: CREATE_MATERIALIZED_VIEW
+POSTHOOK: Input: db1@cmv_basetable
+POSTHOOK: Output: database:db2
+POSTHOOK: Output: db2@cmv_mat_view2
+PREHOOK: query: select * from cmv_mat_view2
+PREHOOK: type: QUERY
+PREHOOK: Input: db2@cmv_mat_view2
+#### A masked pattern was here ####
+POSTHOOK: query: select * from cmv_mat_view2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: db2@cmv_mat_view2
+#### A masked pattern was here ####
+3 978.76
+3 9.80
+PREHOOK: query: show tblproperties cmv_mat_view2
+PREHOOK: type: SHOW_TBLPROPERTIES
+POSTHOOK: query: show tblproperties cmv_mat_view2
+POSTHOOK: type: SHOW_TBLPROPERTIES
+numFiles 1
+totalSize 322
+#### A masked pattern was here ####
+PREHOOK: query: create database db3
+PREHOOK: type: CREATEDATABASE
+PREHOOK: Output: database:db3
+POSTHOOK: query: create database db3
+POSTHOOK: type: CREATEDATABASE
+POSTHOOK: Output: database:db3
+PREHOOK: query: use db3
+PREHOOK: type: SWITCHDATABASE
+PREHOOK: Input: database:db3
+POSTHOOK: query: use db3
+POSTHOOK: type: SWITCHDATABASE
+POSTHOOK: Input: database:db3
+PREHOOK: query: explain
+select a, c from db1.cmv_basetable where a = 3
+PREHOOK: type: QUERY
+POSTHOOK: query: explain
+select a, c from db1.cmv_basetable where a = 3
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+ Stage-0 is a root stage
+
+STAGE PLANS:
+ Stage: Stage-0
+ Fetch Operator
+ limit: -1
+ Processor Tree:
+ TableScan
+ alias: db2.cmv_mat_view2
+ Statistics: Num rows: 2 Data size: 322 Basic stats: COMPLETE Column stats: NONE
+ Select Operator
+ expressions: a (type: int), c (type: decimal(10,2))
+ outputColumnNames: _col0, _col1
+ Statistics: Num rows: 2 Data size: 322 Basic stats: COMPLETE Column stats: NONE
+ ListSink
+
+PREHOOK: query: select a, c from db1.cmv_basetable where a = 3
+PREHOOK: type: QUERY
+PREHOOK: Input: db1@cmv_basetable
+PREHOOK: Input: db2@cmv_mat_view2
+#### A masked pattern was here ####
+POSTHOOK: query: select a, c from db1.cmv_basetable where a = 3
+POSTHOOK: type: QUERY
+POSTHOOK: Input: db1@cmv_basetable
+POSTHOOK: Input: db2@cmv_mat_view2
+#### A masked pattern was here ####
+3 978.76
+3 9.80
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/test/results/clientpositive/materialized_view_describe.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/materialized_view_describe.q.out b/ql/src/test/results/clientpositive/materialized_view_describe.q.out
index 65d94d3..92de293 100644
--- a/ql/src/test/results/clientpositive/materialized_view_describe.q.out
+++ b/ql/src/test/results/clientpositive/materialized_view_describe.q.out
@@ -79,6 +79,11 @@ Compressed: No
Num Buckets: -1
Bucket Columns: []
Sort Columns: []
+
+# View Information
+View Original Text: select a, c from cmv_basetable
+View Expanded Text: null
+View Rewrite Enabled: No
PREHOOK: query: show tblproperties cmv_mat_view
PREHOOK: type: SHOW_TBLPROPERTIES
POSTHOOK: query: show tblproperties cmv_mat_view
@@ -157,6 +162,11 @@ Compressed: No
Num Buckets: -1
Bucket Columns: []
Sort Columns: []
+
+# View Information
+View Original Text: select a from cmv_basetable
+View Expanded Text: null
+View Rewrite Enabled: No
PREHOOK: query: select a from cmv_mat_view2
PREHOOK: type: QUERY
PREHOOK: Input: default@cmv_mat_view2
@@ -228,6 +238,11 @@ Compressed: No
Num Buckets: -1
Bucket Columns: []
Sort Columns: []
+
+# View Information
+View Original Text: select * from cmv_basetable
+View Expanded Text: null
+View Rewrite Enabled: No
PREHOOK: query: select a, b, c from cmv_mat_view3
PREHOOK: type: QUERY
PREHOOK: Input: default@cmv_mat_view3
@@ -310,6 +325,11 @@ Compressed: No
Num Buckets: -1
Bucket Columns: []
Sort Columns: []
+
+# View Information
+View Original Text: select a from cmv_basetable
+View Expanded Text: null
+View Rewrite Enabled: No
PREHOOK: query: select a from cmv_mat_view4
PREHOOK: type: QUERY
PREHOOK: Input: default@cmv_mat_view4
http://git-wip-us.apache.org/repos/asf/hive/blob/3da29fe7/ql/src/test/results/clientpositive/spark/union_top_level.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/union_top_level.q.out b/ql/src/test/results/clientpositive/spark/union_top_level.q.out
index e1c7fc7..9be5361 100644
--- a/ql/src/test/results/clientpositive/spark/union_top_level.q.out
+++ b/ql/src/test/results/clientpositive/spark/union_top_level.q.out
@@ -1002,6 +1002,7 @@ union all
select * from (select key, 1 as value from src where key % 3 == 1 limit 3)b
union all
select * from (select key, 2 as value from src where key % 3 == 2 limit 3)c
+ rewrite enabled: false
PREHOOK: query: create view union_top_view as
select * from (select key, 0 as value from src where key % 3 == 0 limit 3)a