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 2019/02/22 19:52:59 UTC
[hive] branch branch-3 updated: HIVE-21301: Show tables statement
to include views and materialized views (Jesus Camacho Rodriguez,
reviewed by Ashutosh Chauhan)
This is an automated email from the ASF dual-hosted git repository.
jcamacho pushed a commit to branch branch-3
in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/branch-3 by this push:
new 510da5b HIVE-21301: Show tables statement to include views and materialized views (Jesus Camacho Rodriguez, reviewed by Ashutosh Chauhan)
510da5b is described below
commit 510da5bd4d9f50cd353517fe6172b566d4a8ebd1
Author: Jesus Camacho Rodriguez <jc...@apache.org>
AuthorDate: Wed Feb 20 18:39:26 2019 -0800
HIVE-21301: Show tables statement to include views and materialized views (Jesus Camacho Rodriguez, reviewed by Ashutosh Chauhan)
---
.../org/apache/hadoop/hive/ql/exec/DDLTask.java | 49 ++++++-----
.../org/apache/hadoop/hive/ql/metadata/Hive.java | 12 +++
.../metadata/formatting/JsonMetaDataFormatter.java | 24 ++++++
.../ql/metadata/formatting/MetaDataFormatter.java | 6 ++
.../metadata/formatting/TextMetaDataFormatter.java | 27 ++++++
.../hadoop/hive/ql/parse/DDLSemanticAnalyzer.java | 43 +++++-----
.../org/apache/hadoop/hive/ql/parse/HiveParser.g | 12 ++-
.../apache/hadoop/hive/ql/plan/ShowTablesDesc.java | 49 ++++++++++-
.../test/queries/clientnegative/show_tables_bad3.q | 1 +
ql/src/test/queries/clientpositive/show_tables.q | 7 +-
.../results/clientnegative/show_tables_bad3.q.out | 1 +
.../test/results/clientpositive/create_view.q.out | 3 +
.../results/clientpositive/dbtxnmgr_query5.q.out | 1 +
.../test/results/clientpositive/show_tables.q.out | 96 ++++++++++++----------
14 files changed, 239 insertions(+), 92 deletions(-)
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
index c072133..5d07b1b 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
@@ -2780,31 +2780,38 @@ public class DDLTask extends Task<DDLWork> implements Serializable {
*/
private int showTablesOrViews(Hive db, ShowTablesDesc showDesc) throws HiveException {
// get the tables/views for the desired pattern - populate the output stream
- List<String> tablesOrViews = null;
- List<Table> materializedViews = null;
+ List<String> tableNames = null;
+ List<Table> tableObjects = null;
- String dbName = showDesc.getDbName();
- String pattern = showDesc.getPattern(); // if null, all tables/views are returned
- String resultsFile = showDesc.getResFile();
- TableType type = showDesc.getType(); // null for tables, VIRTUAL_VIEW for views, MATERIALIZED_VIEW for MVs
+ TableType type = showDesc.getType(); // null for tables, VIRTUAL_VIEW for views, MATERIALIZED_VIEW for MVs
+ String dbName = showDesc.getDbName();
+ String pattern = showDesc.getPattern(); // if null, all tables/views are returned
+ TableType typeFilter = showDesc.getTypeFilter();
+ String resultsFile = showDesc.getResFile();
+ boolean isExtended = showDesc.isExtended();
if (!db.databaseExists(dbName)) {
throw new HiveException(ErrorMsg.DATABASE_NOT_EXISTS, dbName);
}
LOG.debug("pattern: {}", pattern);
+ LOG.debug("typeFilter: {}", typeFilter);
if (type == null) {
- tablesOrViews = new ArrayList<>();
- tablesOrViews.addAll(db.getTablesByType(dbName, pattern, TableType.MANAGED_TABLE));
- tablesOrViews.addAll(db.getTablesByType(dbName, pattern, TableType.EXTERNAL_TABLE));
- LOG.debug("Found {} table(s) matching the SHOW TABLES statement.", tablesOrViews.size());
+ if (isExtended) {
+ tableObjects = new ArrayList<>();
+ tableObjects.addAll(db.getTableObjectsByType(dbName, pattern, typeFilter));
+ LOG.debug("Found {} table(s) matching the SHOW EXTENDED TABLES statement.", tableObjects.size());
+ } else {
+ tableNames = db.getTablesByType(dbName, pattern, typeFilter);
+ LOG.debug("Found {} table(s) matching the SHOW TABLES statement.", tableNames.size());
+ }
} else if (type == TableType.MATERIALIZED_VIEW) {
- materializedViews = new ArrayList<>();
- materializedViews.addAll(db.getMaterializedViewObjectsByPattern(dbName, pattern));
- LOG.debug("Found {} materialized view(s) matching the SHOW MATERIALIZED VIEWS statement.", materializedViews.size());
+ tableObjects = new ArrayList<>();
+ tableObjects.addAll(db.getMaterializedViewObjectsByPattern(dbName, pattern));
+ LOG.debug("Found {} materialized view(s) matching the SHOW MATERIALIZED VIEWS statement.", tableObjects.size());
} else if (type == TableType.VIRTUAL_VIEW) {
- tablesOrViews = db.getTablesByType(dbName, pattern, type);
- LOG.debug("Found {} view(s) matching the SHOW VIEWS statement.", tablesOrViews.size());
+ tableNames = db.getTablesByType(dbName, pattern, type);
+ LOG.debug("Found {} view(s) matching the SHOW VIEWS statement.", tableNames.size());
} else {
throw new HiveException("Option not recognized in SHOW TABLES/VIEWS/MATERIALIZED VIEWS");
}
@@ -2816,12 +2823,16 @@ public class DDLTask extends Task<DDLWork> implements Serializable {
FileSystem fs = resFile.getFileSystem(conf);
outStream = fs.create(resFile);
// Sort by name and print
- if (tablesOrViews != null) {
- SortedSet<String> sortedSet = new TreeSet<String>(tablesOrViews);
+ if (tableNames != null) {
+ SortedSet<String> sortedSet = new TreeSet<String>(tableNames);
formatter.showTables(outStream, sortedSet);
} else {
- Collections.sort(materializedViews, Comparator.comparing(Table::getTableName));
- formatter.showMaterializedViews(outStream, materializedViews);
+ Collections.sort(tableObjects, Comparator.comparing(Table::getTableName));
+ if (isExtended) {
+ formatter.showTablesExtended(outStream, tableObjects);
+ } else {
+ formatter.showMaterializedViews(outStream, tableObjects);
+ }
}
outStream.close();
} catch (Exception e) {
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
index d4f824e..08d257d 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
@@ -1207,6 +1207,18 @@ public class Hive {
}
/**
+ * Get tables for the specified database that match the provided regex pattern and table type.
+ * @param dbName
+ * @param pattern
+ * @param tableType
+ * @return List of table objects
+ * @throws HiveException
+ */
+ public List<Table> getTableObjectsByType(String dbName, String pattern, TableType tableType) throws HiveException {
+ return getTableObjects(dbName, pattern, tableType);
+ }
+
+ /**
* Get all materialized view names for the specified database.
* @param dbName
* @return List of materialized view table names
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/JsonMetaDataFormatter.java b/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/JsonMetaDataFormatter.java
index 4c4f9c1..014a805 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/JsonMetaDataFormatter.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/JsonMetaDataFormatter.java
@@ -113,6 +113,30 @@ public class JsonMetaDataFormatter implements MetaDataFormatter {
}
/**
+ * Show a list of tables including table types.
+ */
+ @Override
+ public void showTablesExtended(DataOutputStream out, List<Table> tables)
+ throws HiveException {
+ if (tables.isEmpty()) {
+ // Nothing to do
+ return;
+ }
+
+ MapBuilder builder = MapBuilder.create();
+ ArrayList<Map<String, Object>> res = new ArrayList<Map<String, Object>>();
+ for (Table table : tables) {
+ final String tableName = table.getTableName();
+ final String tableType = table.getTableType().toString();
+ res.add(builder
+ .put("Table Name", tableName)
+ .put("Table Type", tableType)
+ .build());
+ }
+ asJson(out, builder.put("tables", res).build());
+ }
+
+ /**
* Show a list of materialized views.
*/
@Override
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/MetaDataFormatter.java b/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/MetaDataFormatter.java
index 936a808..0f53ae4 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/MetaDataFormatter.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/MetaDataFormatter.java
@@ -71,6 +71,12 @@ public interface MetaDataFormatter {
throws HiveException;
/**
+ * Show a list of tables including table types.
+ */
+ public void showTablesExtended(DataOutputStream out, List<Table> tables)
+ throws HiveException;
+
+ /**
* Show a list of materialized views.
*/
public void showMaterializedViews(DataOutputStream out, List<Table> materializedViews)
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/TextMetaDataFormatter.java b/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/TextMetaDataFormatter.java
index dab538f..8498311 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/TextMetaDataFormatter.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/TextMetaDataFormatter.java
@@ -133,6 +133,33 @@ class TextMetaDataFormatter implements MetaDataFormatter {
}
/**
+ * Show a list of tables including table types.
+ */
+ public void showTablesExtended(DataOutputStream out, List<Table> tables)
+ throws HiveException {
+ if (tables.isEmpty()) {
+ // Nothing to do
+ return;
+ }
+
+ try {
+ TextMetaDataTable mdt = new TextMetaDataTable();
+ mdt.addRow("# Table Name", "Table Type");
+ for (Table table : tables) {
+ final String tableName = table.getTableName();
+ final String tableType = table.getTableType().toString();
+ mdt.addRow(tableName, tableType);
+ }
+ // In case the query is served by HiveServer2, don't pad it with spaces,
+ // as HiveServer2 output is consumed by JDBC/ODBC clients.
+ out.write(mdt.renderTable(!SessionState.get().isHiveServerQuery()).getBytes("UTF-8"));
+ out.write(terminator);
+ } catch (IOException e) {
+ throw new HiveException(e);
+ }
+ }
+
+ /**
* Show a list of materialized views.
*/
@Override
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
index b14648a..c553529 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
@@ -2620,33 +2620,32 @@ public class DDLSemanticAnalyzer extends BaseSemanticAnalyzer {
ShowTablesDesc showTblsDesc;
String dbName = SessionState.get().getCurrentDatabase();
String tableNames = null;
+ TableType tableTypeFilter = null;
+ boolean isExtended = false;
- if (ast.getChildCount() > 3) {
+ if (ast.getChildCount() > 4) {
throw new SemanticException(ErrorMsg.INVALID_AST_TREE.getMsg(ast.toStringTree()));
}
- switch (ast.getChildCount()) {
- case 1: // Uses a pattern
- tableNames = unescapeSQLString(ast.getChild(0).getText());
- showTblsDesc = new ShowTablesDesc(ctx.getResFile(), dbName, tableNames);
- break;
- case 2: // Specifies a DB
- assert (ast.getChild(0).getType() == HiveParser.TOK_FROM);
- dbName = unescapeIdentifier(ast.getChild(1).getText());
- validateDatabase(dbName);
- showTblsDesc = new ShowTablesDesc(ctx.getResFile(), dbName);
- break;
- case 3: // Uses a pattern and specifies a DB
- assert (ast.getChild(0).getType() == HiveParser.TOK_FROM);
- dbName = unescapeIdentifier(ast.getChild(1).getText());
- tableNames = unescapeSQLString(ast.getChild(2).getText());
- validateDatabase(dbName);
- showTblsDesc = new ShowTablesDesc(ctx.getResFile(), dbName, tableNames);
- break;
- default: // No pattern or DB
- showTblsDesc = new ShowTablesDesc(ctx.getResFile(), dbName);
- break;
+ for (int i = 0; i < ast.getChildCount(); i++) {
+ ASTNode child = (ASTNode) ast.getChild(i);
+ if (child.getType() == HiveParser.TOK_FROM) { // Specifies a DB
+ dbName = unescapeIdentifier(ast.getChild(++i).getText());
+ validateDatabase(dbName);
+ } else if (child.getType() == HiveParser.TOK_TABLE_TYPE) { // Filter on table type
+ String tableType = unescapeIdentifier(child.getChild(0).getText());
+ if (!tableType.equalsIgnoreCase("table_type")) {
+ throw new SemanticException("SHOW TABLES statement only allows equality filter on table_type value");
+ }
+ tableTypeFilter = TableType.valueOf(unescapeSQLString(child.getChild(1).getText()));
+ } else if (child.getType() == HiveParser.KW_EXTENDED) { // Include table type
+ isExtended = true;
+ } else { // Uses a pattern
+ tableNames = unescapeSQLString(child.getText());
+ }
}
+
+ showTblsDesc = new ShowTablesDesc(ctx.getResFile(), dbName, tableNames, tableTypeFilter, isExtended);
inputs.add(new ReadEntity(getDatabase(dbName)));
rootTasks.add(TaskFactory.get(new DDLWork(getInputs(), getOutputs(),
showTblsDesc)));
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 f12991f..fad258e 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
@@ -1574,7 +1574,8 @@ showStatement
@init { pushMsg("show statement", state); }
@after { popMsg(state); }
: KW_SHOW (KW_DATABASES|KW_SCHEMAS) (KW_LIKE showStmtIdentifier)? -> ^(TOK_SHOWDATABASES showStmtIdentifier?)
- | KW_SHOW KW_TABLES ((KW_FROM|KW_IN) db_name=identifier)? (KW_LIKE showStmtIdentifier|showStmtIdentifier)? -> ^(TOK_SHOWTABLES (TOK_FROM $db_name)? showStmtIdentifier?)
+ | KW_SHOW (isExtended=KW_EXTENDED)? KW_TABLES ((KW_FROM|KW_IN) db_name=identifier)? (filter=showTablesFilterExpr)?
+ -> ^(TOK_SHOWTABLES (TOK_FROM $db_name)? $filter? $isExtended?)
| KW_SHOW KW_VIEWS ((KW_FROM|KW_IN) db_name=identifier)? (KW_LIKE showStmtIdentifier|showStmtIdentifier)? -> ^(TOK_SHOWVIEWS (TOK_FROM $db_name)? showStmtIdentifier?)
| KW_SHOW KW_MATERIALIZED KW_VIEWS ((KW_FROM|KW_IN) db_name=identifier)? (KW_LIKE showStmtIdentifier|showStmtIdentifier)? -> ^(TOK_SHOWMATERIALIZEDVIEWS (TOK_FROM $db_name)? showStmtIdentifier?)
| KW_SHOW KW_COLUMNS (KW_FROM|KW_IN) tableName ((KW_FROM|KW_IN) db_name=identifier)? (KW_LIKE showStmtIdentifier|showStmtIdentifier)?
@@ -1605,6 +1606,15 @@ showStatement
)
;
+showTablesFilterExpr
+@init { pushMsg("show tables filter expr", state); }
+@after { popMsg(state); }
+ : KW_WHERE identifier EQUAL StringLiteral
+ -> ^(TOK_TABLE_TYPE identifier StringLiteral)
+ | KW_LIKE showStmtIdentifier|showStmtIdentifier
+ -> showStmtIdentifier
+ ;
+
lockStatement
@init { pushMsg("lock statement", state); }
@after { popMsg(state); }
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/ShowTablesDesc.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/ShowTablesDesc.java
index 1c16252..0f7a3cd 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/ShowTablesDesc.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/ShowTablesDesc.java
@@ -39,21 +39,28 @@ public class ShowTablesDesc extends DDLDesc implements Serializable {
private static final String table = "show";
/**
- * thrift ddl for the result of show tables.
+ * thrift ddl for the result of show tables and show views.
*/
private static final String TABLES_VIEWS_SCHEMA = "tab_name#string";
/**
+ * thrift ddl for the result of show extended tables.
+ */
+ private static final String EXTENDED_TABLES_SCHEMA = "tab_name,table_type#string,string";
+
+ /**
* thrift ddl for the result of show tables.
*/
private static final String MATERIALIZED_VIEWS_SCHEMA =
"mv_name,rewrite_enabled,mode#string:string:string";
+ TableType type;
String pattern;
+ TableType typeFilter;
String dbName;
String resFile;
- TableType type;
+ boolean isExtended;
public String getTable() {
return table;
@@ -63,7 +70,7 @@ public class ShowTablesDesc extends DDLDesc implements Serializable {
if (type != null && type == TableType.MATERIALIZED_VIEW) {
return MATERIALIZED_VIEWS_SCHEMA;
}
- return TABLES_VIEWS_SCHEMA;
+ return isExtended ? EXTENDED_TABLES_SCHEMA : TABLES_VIEWS_SCHEMA;
}
public ShowTablesDesc() {
@@ -90,10 +97,12 @@ public class ShowTablesDesc extends DDLDesc implements Serializable {
* @param pattern
* names of tables to show
*/
- public ShowTablesDesc(Path resFile, String dbName, String pattern) {
+ public ShowTablesDesc(Path resFile, String dbName, String pattern, TableType typeFilter, boolean isExtended) {
this.resFile = resFile.toString();
this.dbName = dbName;
this.pattern = pattern;
+ this.typeFilter = typeFilter;
+ this.isExtended = isExtended;
}
/**
@@ -170,4 +179,36 @@ public class ShowTablesDesc extends DDLDesc implements Serializable {
public void setDbName(String dbName) {
this.dbName = dbName;
}
+
+ /**
+ * @return is extended
+ */
+ @Explain(displayName = "extended", explainLevels = { Level.USER, Level.DEFAULT, Level.EXTENDED }, displayOnlyOnTrue = true)
+ public boolean isExtended() {
+ return isExtended;
+ }
+
+ /**
+ * @param isExtended
+ * whether extended modifier is enabled
+ */
+ public void setIsExtended(boolean isExtended) {
+ this.isExtended = isExtended;
+ }
+
+ /**
+ * @return table type filter, null if it is not filtered
+ */
+ @Explain(displayName = "table type filter", explainLevels = { Level.USER, Level.DEFAULT, Level.EXTENDED })
+ public TableType getTypeFilter() {
+ return typeFilter;
+ }
+
+ /**
+ * @param typeFilter
+ * table type filter for show statement
+ */
+ public void setTypeFilter(TableType typeFilter) {
+ this.typeFilter = typeFilter;
+ }
}
diff --git a/ql/src/test/queries/clientnegative/show_tables_bad3.q b/ql/src/test/queries/clientnegative/show_tables_bad3.q
new file mode 100644
index 0000000..aa93a98
--- /dev/null
+++ b/ql/src/test/queries/clientnegative/show_tables_bad3.q
@@ -0,0 +1 @@
+SHOW TABLES FROM default WHERE `other_column` = 'MANAGED_TABLE';
diff --git a/ql/src/test/queries/clientpositive/show_tables.q b/ql/src/test/queries/clientpositive/show_tables.q
index a6e3837..087d40f 100644
--- a/ql/src/test/queries/clientpositive/show_tables.q
+++ b/ql/src/test/queries/clientpositive/show_tables.q
@@ -17,15 +17,18 @@ USE test_db;
CREATE TABLE foo_n4(a INT);
CREATE TABLE bar_n0(a INT);
CREATE TABLE baz(a INT);
+CREATE VIEW test_view_n100 AS SELECT * FROM foo_n4;
-- SHOW TABLES basic syntax tests
USE default;
SHOW TABLES FROM test_db;
-SHOW TABLES FROM default;
+SHOW EXTENDED TABLES FROM test_db;
SHOW TABLES IN test_db;
-SHOW TABLES IN default;
+SHOW EXTENDED TABLES IN test_db;
SHOW TABLES IN test_db "test*";
SHOW TABLES IN test_db LIKE "nomatch";
+SHOW TABLES IN test_db WHERE `table_type` = "MANAGED_TABLE";
+SHOW EXTENDED TABLES IN test_db WHERE `table_type` = "VIRTUAL_VIEW";
-- SHOW TABLE EXTENDED basic syntax tests and wildcard
SHOW TABLE EXTENDED IN test_db LIKE foo_n4;
diff --git a/ql/src/test/results/clientnegative/show_tables_bad3.q.out b/ql/src/test/results/clientnegative/show_tables_bad3.q.out
new file mode 100644
index 0000000..06a1add
--- /dev/null
+++ b/ql/src/test/results/clientnegative/show_tables_bad3.q.out
@@ -0,0 +1 @@
+FAILED: SemanticException SHOW TABLES statement only allows equality filter on table_type value
diff --git a/ql/src/test/results/clientpositive/create_view.q.out b/ql/src/test/results/clientpositive/create_view.q.out
index f565e76..5cb7755 100644
--- a/ql/src/test/results/clientpositive/create_view.q.out
+++ b/ql/src/test/results/clientpositive/create_view.q.out
@@ -232,6 +232,9 @@ PREHOOK: Input: database:default
POSTHOOK: query: SHOW TABLES 'view.*'
POSTHOOK: type: SHOWTABLES
POSTHOOK: Input: database:default
+view1
+view2
+view3
PREHOOK: query: SHOW VIEWS 'view.*'
PREHOOK: type: SHOWVIEWS
POSTHOOK: query: SHOW VIEWS 'view.*'
diff --git a/ql/src/test/results/clientpositive/dbtxnmgr_query5.q.out b/ql/src/test/results/clientpositive/dbtxnmgr_query5.q.out
index 37ff3ec..ea76a37 100644
--- a/ql/src/test/results/clientpositive/dbtxnmgr_query5.q.out
+++ b/ql/src/test/results/clientpositive/dbtxnmgr_query5.q.out
@@ -43,6 +43,7 @@ POSTHOOK: query: show tables
POSTHOOK: type: SHOWTABLES
POSTHOOK: Input: database:foo
t1_n40
+v1_n3
PREHOOK: query: describe T1_n40
PREHOOK: type: DESCTABLE
PREHOOK: Input: foo@t1_n40
diff --git a/ql/src/test/results/clientpositive/show_tables.q.out b/ql/src/test/results/clientpositive/show_tables.q.out
index e1016aa..18d7c59 100644
--- a/ql/src/test/results/clientpositive/show_tables.q.out
+++ b/ql/src/test/results/clientpositive/show_tables.q.out
@@ -116,6 +116,17 @@ POSTHOOK: query: CREATE TABLE baz(a INT)
POSTHOOK: type: CREATETABLE
POSTHOOK: Output: database:test_db
POSTHOOK: Output: test_db@baz
+PREHOOK: query: CREATE VIEW test_view_n100 AS SELECT * FROM foo_n4
+PREHOOK: type: CREATEVIEW
+PREHOOK: Input: test_db@foo_n4
+PREHOOK: Output: database:test_db
+PREHOOK: Output: test_db@test_view_n100
+POSTHOOK: query: CREATE VIEW test_view_n100 AS SELECT * FROM foo_n4
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Input: test_db@foo_n4
+POSTHOOK: Output: database:test_db
+POSTHOOK: Output: test_db@test_view_n100
+POSTHOOK: Lineage: test_view_n100.a SIMPLE [(foo_n4)foo_n4.FieldSchema(name:a, type:int, comment:null), ]
PREHOOK: query: USE default
PREHOOK: type: SWITCHDATABASE
PREHOOK: Input: database:default
@@ -131,30 +142,19 @@ POSTHOOK: Input: database:test_db
bar_n0
baz
foo_n4
-PREHOOK: query: SHOW TABLES FROM default
+test_view_n100
+PREHOOK: query: SHOW EXTENDED TABLES FROM test_db
PREHOOK: type: SHOWTABLES
-PREHOOK: Input: database:default
-POSTHOOK: query: SHOW TABLES FROM default
+PREHOOK: Input: database:test_db
+POSTHOOK: query: SHOW EXTENDED TABLES FROM test_db
POSTHOOK: type: SHOWTABLES
-POSTHOOK: Input: database:default
-alltypesorc
-alltypesparquet
-cbo_t1
-cbo_t2
-cbo_t3
-lineitem
-part
-shtb_test1_n0
-shtb_test2_n0
-src
-src1
-src_cbo
-src_json
-src_sequencefile
-src_thrift
-srcbucket
-srcbucket2
-srcpart
+POSTHOOK: Input: database:test_db
+# Table Name Table Type
+bar_n0 MANAGED_TABLE
+baz MANAGED_TABLE
+foo_n4 MANAGED_TABLE
+test_view_n100 VIRTUAL_VIEW
+
PREHOOK: query: SHOW TABLES IN test_db
PREHOOK: type: SHOWTABLES
PREHOOK: Input: database:test_db
@@ -164,42 +164,50 @@ POSTHOOK: Input: database:test_db
bar_n0
baz
foo_n4
-PREHOOK: query: SHOW TABLES IN default
+test_view_n100
+PREHOOK: query: SHOW EXTENDED TABLES IN test_db
PREHOOK: type: SHOWTABLES
-PREHOOK: Input: database:default
-POSTHOOK: query: SHOW TABLES IN default
+PREHOOK: Input: database:test_db
+POSTHOOK: query: SHOW EXTENDED TABLES IN test_db
POSTHOOK: type: SHOWTABLES
-POSTHOOK: Input: database:default
-alltypesorc
-alltypesparquet
-cbo_t1
-cbo_t2
-cbo_t3
-lineitem
-part
-shtb_test1_n0
-shtb_test2_n0
-src
-src1
-src_cbo
-src_json
-src_sequencefile
-src_thrift
-srcbucket
-srcbucket2
-srcpart
+POSTHOOK: Input: database:test_db
+# Table Name Table Type
+bar_n0 MANAGED_TABLE
+baz MANAGED_TABLE
+foo_n4 MANAGED_TABLE
+test_view_n100 VIRTUAL_VIEW
+
PREHOOK: query: SHOW TABLES IN test_db "test*"
PREHOOK: type: SHOWTABLES
PREHOOK: Input: database:test_db
POSTHOOK: query: SHOW TABLES IN test_db "test*"
POSTHOOK: type: SHOWTABLES
POSTHOOK: Input: database:test_db
+test_view_n100
PREHOOK: query: SHOW TABLES IN test_db LIKE "nomatch"
PREHOOK: type: SHOWTABLES
PREHOOK: Input: database:test_db
POSTHOOK: query: SHOW TABLES IN test_db LIKE "nomatch"
POSTHOOK: type: SHOWTABLES
POSTHOOK: Input: database:test_db
+PREHOOK: query: SHOW TABLES IN test_db WHERE `table_type` = "MANAGED_TABLE"
+PREHOOK: type: SHOWTABLES
+PREHOOK: Input: database:test_db
+POSTHOOK: query: SHOW TABLES IN test_db WHERE `table_type` = "MANAGED_TABLE"
+POSTHOOK: type: SHOWTABLES
+POSTHOOK: Input: database:test_db
+bar_n0
+baz
+foo_n4
+PREHOOK: query: SHOW EXTENDED TABLES IN test_db WHERE `table_type` = "VIRTUAL_VIEW"
+PREHOOK: type: SHOWTABLES
+PREHOOK: Input: database:test_db
+POSTHOOK: query: SHOW EXTENDED TABLES IN test_db WHERE `table_type` = "VIRTUAL_VIEW"
+POSTHOOK: type: SHOWTABLES
+POSTHOOK: Input: database:test_db
+# Table Name Table Type
+test_view_n100 VIRTUAL_VIEW
+
PREHOOK: query: SHOW TABLE EXTENDED IN test_db LIKE foo_n4
PREHOOK: type: SHOW_TABLESTATUS
POSTHOOK: query: SHOW TABLE EXTENDED IN test_db LIKE foo_n4