diff --git a/ql/src/java/org/apache/hadoop/hive/ql/hooks/EnforceReadOnlyTables.java b/ql/src/java/org/apache/hadoop/hive/ql/hooks/EnforceReadOnlyTables.java index 4569ed5..895ce89 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/hooks/EnforceReadOnlyTables.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/hooks/EnforceReadOnlyTables.java @@ -53,11 +53,12 @@ public void run(HookContext hookContext) throws Exception { Set inputs = hookContext.getInputs(); Set outputs = hookContext.getOutputs(); UserGroupInformation ugi = hookContext.getUgi(); - this.run(ss,inputs,outputs,ugi); + boolean isExplain = hookContext.getQueryPlan().isExplain(); + this.run(ss,inputs,outputs,ugi, isExplain); } public void run(SessionState sess, Set inputs, - Set outputs, UserGroupInformation ugi) + Set outputs, UserGroupInformation ugi, boolean isExplain) throws Exception { // Don't enforce during test driver setup or shutdown. @@ -70,7 +71,7 @@ public void run(SessionState sess, Set inputs, (w.getTyp() == WriteEntity.Type.PARTITION)) { Table t = w.getTable(); if (DEFAULT_DATABASE_NAME.equalsIgnoreCase(t.getDbName()) - && READ_ONLY_TABLES.contains(t.getTableName())) { + && READ_ONLY_TABLES.contains(t.getTableName()) && !isExplain) { throw new RuntimeException ("Cannot overwrite read-only table: " + t.getTableName()); } } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/ExplainSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/ExplainSemanticAnalyzer.java index f62cf9a..4af04c3 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/ExplainSemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/ExplainSemanticAnalyzer.java @@ -164,6 +164,10 @@ public void analyzeInternal(ASTNode ast) throws SemanticException { BaseSemanticAnalyzer sem = SemanticAnalyzerFactory.get(queryState, input); sem.analyze(input, ctx); sem.validate(); + if (!HiveConf.getBoolVar(conf, HiveConf.ConfVars.HIVE_IN_TEST, false)) { + inputs = sem.getInputs(); + outputs = sem.getOutputs(); + } ctx.setResFile(ctx.getLocalTmpPath()); List> tasks = sem.getAllRootTasks();