diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/ExplainTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/ExplainTask.java index d7d33c6f25..f2c4a631c3 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/ExplainTask.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/ExplainTask.java @@ -906,6 +906,10 @@ JSONObject outputPlan(Object work, PrintStream out, continue; } + if(xpl_note.jsonOnly() && !jsonOutput) { + continue; + } + String header = null; boolean skipHeader = xpl_note.skipHeader(); boolean emptyHeader = false; diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/Explain.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/Explain.java index fbda0eada3..81b0e82dc1 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/plan/Explain.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/Explain.java @@ -46,6 +46,8 @@ public boolean in(Level[] levels) { boolean skipHeader() default false; + boolean jsonOnly() default false; + // By default, many existing @Explain classes/methods are NON_VECTORIZED. // // Vectorized methods/classes have detail levels: diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/TableScanDesc.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/TableScanDesc.java index 237c8cfda1..e6f66ed600 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/plan/TableScanDesc.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/TableScanDesc.java @@ -152,6 +152,26 @@ public String getAlias() { return alias; } + @Explain(displayName = "name", jsonOnly = true) + public String getTableName() { + return this.tableMetadata.getTableName(); + } + + @Explain(displayName = "database", jsonOnly = true) + public String getDatabaseName() { + return this.tableMetadata.getDbName(); + } + + @Explain(displayName = "columnsScanned", jsonOnly = true) + public List getColumnNamesForExplain() { + return this.neededColumns; + } + + @Explain(displayName = "isTemp", jsonOnly = true) + public boolean isTemporary() { + return tableMetadata.isTemporary(); + } + @Explain(explainLevels = { Level.USER }) public String getTbl() { StringBuilder sb = new StringBuilder(); @@ -180,6 +200,7 @@ public boolean isAcidTable() { return this.neededColumns; } + @Explain(displayName = "filterExpr") public String getFilterExprString() { if (filterExpr == null) {