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 ba0070dd68..64c34777bf 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 @@ -45,12 +45,14 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import java.util.SortedMap; import java.util.SortedSet; import java.util.TreeMap; import java.util.TreeSet; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.concurrent.ExecutionException; +import java.util.stream.Collectors; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableSet; @@ -2779,6 +2781,7 @@ private int showDatabases(Hive db, ShowDatabasesDesc showDatabasesDesc) throws H private int showTablesOrViews(Hive db, ShowTablesDesc showDesc) throws HiveException { // get the tables/views for the desired pattern - populate the output stream List tablesOrViews = null; + List materializedViews = null; String dbName = showDesc.getDbName(); String pattern = showDesc.getPattern(); // if null, all tables/views are returned @@ -2790,8 +2793,21 @@ private int showTablesOrViews(Hive db, ShowTablesDesc showDesc) throws HiveExcep } LOG.debug("pattern: {}", pattern); - tablesOrViews = db.getTablesByType(dbName, pattern, type); - LOG.debug("Found {} tables/view(s) matching the SHOW TABLES/VIEWS statement.", tablesOrViews.size()); + 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()); + } else if (type == TableType.MATERIALIZED_VIEW) { + materializedViews = new ArrayList<>(); + materializedViews.addAll(db.getAllMaterializedViewObjects(dbName)); + LOG.debug("Found {} materialized view(s) matching the SHOW MATERIALIZED VIEWS statement.", materializedViews.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()); + } else { + throw new HiveException("Option not recognized in SHOW TABLES/VIEWS/MATERIALIZED VIEWS"); + } // write the results in the file DataOutputStream outStream = null; @@ -2799,11 +2815,15 @@ private int showTablesOrViews(Hive db, ShowTablesDesc showDesc) throws HiveExcep Path resFile = new Path(resultsFile); FileSystem fs = resFile.getFileSystem(conf); outStream = fs.create(resFile); - - SortedSet sortedSet = new TreeSet(tablesOrViews); - formatter.showTables(outStream, sortedSet); + // Sort by name and print + if (tablesOrViews != null) { + SortedSet sortedSet = new TreeSet(tablesOrViews); + formatter.showTables(outStream, sortedSet); + } else { + Collections.sort(materializedViews, Comparator.comparing(Table::getTableName)); + formatter.showMaterializedViews(outStream, materializedViews); + } outStream.close(); - outStream = null; } catch (Exception e) { throw new HiveException(e, ErrorMsg.GENERIC_ERROR, "in database" + dbName); } finally { 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 df0a2370a9..4c4f9c1872 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 @@ -28,9 +28,11 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.TimeUnit; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; +import org.apache.hadoop.hive.ql.session.SessionState; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.hadoop.fs.FileStatus; @@ -57,6 +59,8 @@ import org.codehaus.jackson.JsonGenerator; import org.codehaus.jackson.map.ObjectMapper; +import static org.apache.hadoop.hive.conf.Constants.MATERIALIZED_VIEW_REWRITING_TIME_WINDOW; + /** * Format table and index information for machine readability using * json. @@ -108,6 +112,50 @@ public void showTables(DataOutputStream out, Set tables) asJson(out, MapBuilder.create().put("tables", tables).build()); } + /** + * Show a list of materialized views. + */ + @Override + public void showMaterializedViews(DataOutputStream out, List
materializedViews) + throws HiveException { + if (materializedViews.isEmpty()) { + // Nothing to do + return; + } + + MapBuilder builder = MapBuilder.create(); + ArrayList> res = new ArrayList>(); + for (Table mv : materializedViews) { + final String mvName = mv.getTableName(); + final String rewriteEnabled = mv.isRewriteEnabled() ? "Yes" : "No"; + // Currently, we only support manual refresh + // TODO: Update whenever we have other modes + final String refreshMode = "Manual refresh"; + final String timeWindowString = mv.getProperty(MATERIALIZED_VIEW_REWRITING_TIME_WINDOW); + final String mode; + if (!org.apache.commons.lang.StringUtils.isEmpty(timeWindowString)) { + long time = HiveConf.toTime(timeWindowString, + HiveConf.getDefaultTimeUnit(HiveConf.ConfVars.HIVE_MATERIALIZED_VIEW_REWRITING_TIME_WINDOW), + TimeUnit.MINUTES); + if (time > 0L) { + mode = refreshMode + " (Valid for " + time + "min)"; + } else if (time == 0L) { + mode = refreshMode + " (Valid until source tables modified)"; + } else { + mode = refreshMode + " (Valid always)"; + } + } else { + mode = refreshMode; + } + res.add(builder + .put("MV Name", mvName) + .put("Rewriting Enabled", rewriteEnabled) + .put("Mode", mode) + .build()); + } + asJson(out, builder.put("materialized views", res).build()); + } + /** * Describe table. */ 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 d15016c5d4..3270e18d4b 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 @@ -20,6 +20,7 @@ import java.io.DataOutputStream; import java.io.OutputStream; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; @@ -68,6 +69,12 @@ public void error(OutputStream out, String errorMessage, int errorCode, String s public void showTables(DataOutputStream out, Set tables) throws HiveException; + /** + * Show a list of materialized views. + */ + public void showMaterializedViews(DataOutputStream out, List
materializedViews) + throws HiveException; + /** * Describe table. * @param out 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 705365b74c..2ff1d94e74 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 @@ -27,9 +27,12 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.TimeUnit; +import org.apache.hadoop.hive.conf.Constants; import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils; import org.apache.hadoop.hive.ql.metadata.StorageHandlerInfo; +import org.apache.hadoop.hive.ql.plan.DescTableDesc; import org.apache.hive.common.util.HiveStringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -58,6 +61,8 @@ import org.apache.hadoop.hive.ql.metadata.UniqueConstraint; import org.apache.hadoop.hive.ql.session.SessionState; +import static org.apache.hadoop.hive.conf.Constants.MATERIALIZED_VIEW_REWRITING_TIME_WINDOW; + /** * Format table and index information for human readability using * simple lines of text. @@ -106,14 +111,14 @@ public void error(OutputStream out, String errorMessage, int errorCode, String s } catch (Exception e) { throw new HiveException(e); } - } + } + /** * Show a list of tables. */ @Override public void showTables(DataOutputStream out, Set tables) - throws HiveException - { + throws HiveException { Iterator iterTbls = tables.iterator(); try { @@ -125,7 +130,54 @@ public void showTables(DataOutputStream out, Set tables) } catch (IOException e) { throw new HiveException(e); } + } + + /** + * Show a list of materialized views. + */ + @Override + public void showMaterializedViews(DataOutputStream out, List
materializedViews) + throws HiveException { + if (materializedViews.isEmpty()) { + // Nothing to do + return; + } + + try { + TextMetaDataTable mdt = new TextMetaDataTable(); + mdt.addRow("# MV Name", "Rewriting Enabled", "Mode"); + for (Table mv : materializedViews) { + final String mvName = mv.getTableName(); + final String rewriteEnabled = mv.isRewriteEnabled() ? "Yes" : "No"; + // Currently, we only support manual refresh + // TODO: Update whenever we have other modes + final String refreshMode = "Manual refresh"; + final String timeWindowString = mv.getProperty(MATERIALIZED_VIEW_REWRITING_TIME_WINDOW); + final String mode; + if (!org.apache.commons.lang.StringUtils.isEmpty(timeWindowString)) { + long time = HiveConf.toTime(timeWindowString, + HiveConf.getDefaultTimeUnit(HiveConf.ConfVars.HIVE_MATERIALIZED_VIEW_REWRITING_TIME_WINDOW), + TimeUnit.MINUTES); + if (time > 0L) { + mode = refreshMode + " (Valid for " + time + "min)"; + } else if (time == 0L) { + mode = refreshMode + " (Valid until source tables modified)"; + } else { + mode = refreshMode + " (Valid always)"; + } + } else { + mode = refreshMode; + } + mdt.addRow(mvName, rewriteEnabled, mode); } + // 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); + } + } @Override public void describeTable(DataOutputStream outStream, String colPath, 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 bf80345623..1c162526b1 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 @@ -32,25 +32,38 @@ @Explain(displayName = "Show Tables", explainLevels = { Level.USER, Level.DEFAULT, Level.EXTENDED }) public class ShowTablesDesc extends DDLDesc implements Serializable { private static final long serialVersionUID = 1L; - String pattern; - String dbName; - String resFile; - TableType type; + /** * table name for the result of show tables. */ private static final String table = "show"; + + /** + * thrift ddl for the result of show tables. + */ + private static final String TABLES_VIEWS_SCHEMA = "tab_name#string"; + /** * thrift ddl for the result of show tables. */ - private static final String schema = "tab_name#string"; + private static final String MATERIALIZED_VIEWS_SCHEMA = + "mv_name,rewrite_enabled,mode#string:string:string"; + + + String pattern; + String dbName; + String resFile; + TableType type; public String getTable() { return table; } public String getSchema() { - return schema; + if (type != null && type == TableType.MATERIALIZED_VIEW) { + return MATERIALIZED_VIEWS_SCHEMA; + } + return TABLES_VIEWS_SCHEMA; } public ShowTablesDesc() { diff --git a/ql/src/test/queries/clientpositive/show_materialized_views.q b/ql/src/test/queries/clientpositive/show_materialized_views.q index f8d49d684d..bd640b530e 100644 --- a/ql/src/test/queries/clientpositive/show_materialized_views.q +++ b/ql/src/test/queries/clientpositive/show_materialized_views.q @@ -11,9 +11,11 @@ CREATE TABLE shtb_test1(KEY INT, VALUE STRING) PARTITIONED BY(ds STRING) STORED AS ORC TBLPROPERTIES ('transactional'='true'); CREATE MATERIALIZED VIEW shtb_test1_view1 DISABLE REWRITE AS SELECT * FROM shtb_test1 where KEY > 1000 and KEY < 2000; -CREATE MATERIALIZED VIEW shtb_test1_view2 AS +CREATE MATERIALIZED VIEW shtb_test1_view2 +TBLPROPERTIES ('rewriting.time.window' = '-1min') AS SELECT * FROM shtb_test1 where KEY > 100 and KEY < 200; -CREATE MATERIALIZED VIEW shtb_full_view2 AS +CREATE MATERIALIZED VIEW shtb_full_view2 +TBLPROPERTIES ('rewriting.time.window' = '5min') AS SELECT * FROM shtb_test1; USE test2; @@ -47,8 +49,10 @@ SHOW MATERIALIZED VIEWS IN test2 LIKE "nomatch"; -- SHOW MATERIALIZED VIEWS from a database with a name that requires escaping CREATE DATABASE `database`; USE `database`; -CREATE TABLE foo_n0(a INT); -CREATE VIEW fooview AS +CREATE TABLE foo_n0(a INT) +STORED AS ORC TBLPROPERTIES ('transactional'='true'); +CREATE MATERIALIZED VIEW fooview +TBLPROPERTIES ('rewriting.time.window' = '0min') AS SELECT * FROM foo_n0; USE default; SHOW MATERIALIZED VIEWS FROM `database` LIKE "fooview"; diff --git a/ql/src/test/results/clientpositive/show_materialized_views.q.out b/ql/src/test/results/clientpositive/show_materialized_views.q.out index 715afea92c..1ceae8172c 100644 --- a/ql/src/test/results/clientpositive/show_materialized_views.q.out +++ b/ql/src/test/results/clientpositive/show_materialized_views.q.out @@ -38,25 +38,29 @@ POSTHOOK: type: CREATE_MATERIALIZED_VIEW POSTHOOK: Input: test1@shtb_test1 POSTHOOK: Output: database:test1 POSTHOOK: Output: test1@shtb_test1_view1 -PREHOOK: query: CREATE MATERIALIZED VIEW shtb_test1_view2 AS +PREHOOK: query: CREATE MATERIALIZED VIEW shtb_test1_view2 +TBLPROPERTIES ('rewriting.time.window' = '-1min') AS SELECT * FROM shtb_test1 where KEY > 100 and KEY < 200 PREHOOK: type: CREATE_MATERIALIZED_VIEW PREHOOK: Input: test1@shtb_test1 PREHOOK: Output: database:test1 PREHOOK: Output: test1@shtb_test1_view2 -POSTHOOK: query: CREATE MATERIALIZED VIEW shtb_test1_view2 AS +POSTHOOK: query: CREATE MATERIALIZED VIEW shtb_test1_view2 +TBLPROPERTIES ('rewriting.time.window' = '-1min') AS SELECT * FROM shtb_test1 where KEY > 100 and KEY < 200 POSTHOOK: type: CREATE_MATERIALIZED_VIEW POSTHOOK: Input: test1@shtb_test1 POSTHOOK: Output: database:test1 POSTHOOK: Output: test1@shtb_test1_view2 -PREHOOK: query: CREATE MATERIALIZED VIEW shtb_full_view2 AS +PREHOOK: query: CREATE MATERIALIZED VIEW shtb_full_view2 +TBLPROPERTIES ('rewriting.time.window' = '5min') AS SELECT * FROM shtb_test1 PREHOOK: type: CREATE_MATERIALIZED_VIEW PREHOOK: Input: test1@shtb_test1 PREHOOK: Output: database:test1 PREHOOK: Output: test1@shtb_full_view2 -POSTHOOK: query: CREATE MATERIALIZED VIEW shtb_full_view2 AS +POSTHOOK: query: CREATE MATERIALIZED VIEW shtb_full_view2 +TBLPROPERTIES ('rewriting.time.window' = '5min') AS SELECT * FROM shtb_test1 POSTHOOK: type: CREATE_MATERIALIZED_VIEW POSTHOOK: Input: test1@shtb_test1 @@ -122,23 +126,38 @@ PREHOOK: query: SHOW MATERIALIZED VIEWS PREHOOK: type: SHOWMATERIALIZEDVIEWS POSTHOOK: query: SHOW MATERIALIZED VIEWS POSTHOOK: type: SHOWMATERIALIZEDVIEWS -shtb_full_view2 -shtb_test1_view1 -shtb_test1_view2 +# MV Name Rewriting Enabled Mode +shtb_full_view2 Yes Manual refresh (Valid for 5min) +shtb_test1_view1 No Manual refresh +shtb_test1_view2 Yes Manual refresh (Valid always) + PREHOOK: query: SHOW MATERIALIZED VIEWS 'test_*' PREHOOK: type: SHOWMATERIALIZEDVIEWS POSTHOOK: query: SHOW MATERIALIZED VIEWS 'test_*' POSTHOOK: type: SHOWMATERIALIZEDVIEWS +# MV Name Rewriting Enabled Mode +shtb_full_view2 Yes Manual refresh (Valid for 5min) +shtb_test1_view1 No Manual refresh +shtb_test1_view2 Yes Manual refresh (Valid always) + PREHOOK: query: SHOW MATERIALIZED VIEWS '*view2' PREHOOK: type: SHOWMATERIALIZEDVIEWS POSTHOOK: query: SHOW MATERIALIZED VIEWS '*view2' POSTHOOK: type: SHOWMATERIALIZEDVIEWS -shtb_full_view2 -shtb_test1_view2 +# MV Name Rewriting Enabled Mode +shtb_full_view2 Yes Manual refresh (Valid for 5min) +shtb_test1_view1 No Manual refresh +shtb_test1_view2 Yes Manual refresh (Valid always) + PREHOOK: query: SHOW MATERIALIZED VIEWS LIKE 'test_view1|test_view2' PREHOOK: type: SHOWMATERIALIZEDVIEWS POSTHOOK: query: SHOW MATERIALIZED VIEWS LIKE 'test_view1|test_view2' POSTHOOK: type: SHOWMATERIALIZEDVIEWS +# MV Name Rewriting Enabled Mode +shtb_full_view2 Yes Manual refresh (Valid for 5min) +shtb_test1_view1 No Manual refresh +shtb_test1_view2 Yes Manual refresh (Valid always) + PREHOOK: query: USE test2 PREHOOK: type: SWITCHDATABASE PREHOOK: Input: database:test2 @@ -149,8 +168,10 @@ PREHOOK: query: SHOW MATERIALIZED VIEWS 'shtb_*' PREHOOK: type: SHOWMATERIALIZEDVIEWS POSTHOOK: query: SHOW MATERIALIZED VIEWS 'shtb_*' POSTHOOK: type: SHOWMATERIALIZEDVIEWS -shtb_test1_view1 -shtb_test2_view2 +# MV Name Rewriting Enabled Mode +shtb_test1_view1 No Manual refresh +shtb_test2_view2 No Manual refresh + PREHOOK: query: USE default PREHOOK: type: SWITCHDATABASE PREHOOK: Input: database:default @@ -161,22 +182,28 @@ PREHOOK: query: SHOW MATERIALIZED VIEWS FROM test1 PREHOOK: type: SHOWMATERIALIZEDVIEWS POSTHOOK: query: SHOW MATERIALIZED VIEWS FROM test1 POSTHOOK: type: SHOWMATERIALIZEDVIEWS -shtb_full_view2 -shtb_test1_view1 -shtb_test1_view2 +# MV Name Rewriting Enabled Mode +shtb_full_view2 Yes Manual refresh (Valid for 5min) +shtb_test1_view1 No Manual refresh +shtb_test1_view2 Yes Manual refresh (Valid always) + PREHOOK: query: SHOW MATERIALIZED VIEWS FROM test2 PREHOOK: type: SHOWMATERIALIZEDVIEWS POSTHOOK: query: SHOW MATERIALIZED VIEWS FROM test2 POSTHOOK: type: SHOWMATERIALIZEDVIEWS -shtb_test1_view1 -shtb_test2_view2 +# MV Name Rewriting Enabled Mode +shtb_test1_view1 No Manual refresh +shtb_test2_view2 No Manual refresh + PREHOOK: query: SHOW MATERIALIZED VIEWS IN test1 PREHOOK: type: SHOWMATERIALIZEDVIEWS POSTHOOK: query: SHOW MATERIALIZED VIEWS IN test1 POSTHOOK: type: SHOWMATERIALIZEDVIEWS -shtb_full_view2 -shtb_test1_view1 -shtb_test1_view2 +# MV Name Rewriting Enabled Mode +shtb_full_view2 Yes Manual refresh (Valid for 5min) +shtb_test1_view1 No Manual refresh +shtb_test1_view2 Yes Manual refresh (Valid always) + PREHOOK: query: SHOW MATERIALIZED VIEWS IN default PREHOOK: type: SHOWMATERIALIZEDVIEWS POSTHOOK: query: SHOW MATERIALIZED VIEWS IN default @@ -185,10 +212,19 @@ PREHOOK: query: SHOW MATERIALIZED VIEWS IN test1 "shtb_test_*" PREHOOK: type: SHOWMATERIALIZEDVIEWS POSTHOOK: query: SHOW MATERIALIZED VIEWS IN test1 "shtb_test_*" POSTHOOK: type: SHOWMATERIALIZEDVIEWS +# MV Name Rewriting Enabled Mode +shtb_full_view2 Yes Manual refresh (Valid for 5min) +shtb_test1_view1 No Manual refresh +shtb_test1_view2 Yes Manual refresh (Valid always) + PREHOOK: query: SHOW MATERIALIZED VIEWS IN test2 LIKE "nomatch" PREHOOK: type: SHOWMATERIALIZEDVIEWS POSTHOOK: query: SHOW MATERIALIZED VIEWS IN test2 LIKE "nomatch" POSTHOOK: type: SHOWMATERIALIZEDVIEWS +# MV Name Rewriting Enabled Mode +shtb_test1_view1 No Manual refresh +shtb_test2_view2 No Manual refresh + PREHOOK: query: CREATE DATABASE `database` PREHOOK: type: CREATEDATABASE PREHOOK: Output: database:database @@ -202,26 +238,29 @@ POSTHOOK: query: USE `database` POSTHOOK: type: SWITCHDATABASE POSTHOOK: Input: database:database PREHOOK: query: CREATE TABLE foo_n0(a INT) +STORED AS ORC TBLPROPERTIES ('transactional'='true') PREHOOK: type: CREATETABLE PREHOOK: Output: database:database PREHOOK: Output: database@foo_n0 POSTHOOK: query: CREATE TABLE foo_n0(a INT) +STORED AS ORC TBLPROPERTIES ('transactional'='true') POSTHOOK: type: CREATETABLE POSTHOOK: Output: database:database POSTHOOK: Output: database@foo_n0 -PREHOOK: query: CREATE VIEW fooview AS +PREHOOK: query: CREATE MATERIALIZED VIEW fooview +TBLPROPERTIES ('rewriting.time.window' = '0min') AS SELECT * FROM foo_n0 -PREHOOK: type: CREATEVIEW +PREHOOK: type: CREATE_MATERIALIZED_VIEW PREHOOK: Input: database@foo_n0 PREHOOK: Output: database:database PREHOOK: Output: database@fooview -POSTHOOK: query: CREATE VIEW fooview AS +POSTHOOK: query: CREATE MATERIALIZED VIEW fooview +TBLPROPERTIES ('rewriting.time.window' = '0min') AS SELECT * FROM foo_n0 -POSTHOOK: type: CREATEVIEW +POSTHOOK: type: CREATE_MATERIALIZED_VIEW POSTHOOK: Input: database@foo_n0 POSTHOOK: Output: database:database POSTHOOK: Output: database@fooview -POSTHOOK: Lineage: fooview.a SIMPLE [(foo_n0)foo_n0.FieldSchema(name:a, type:int, comment:null), ] PREHOOK: query: USE default PREHOOK: type: SWITCHDATABASE PREHOOK: Input: database:default @@ -232,6 +271,9 @@ PREHOOK: query: SHOW MATERIALIZED VIEWS FROM `database` LIKE "fooview" PREHOOK: type: SHOWMATERIALIZEDVIEWS POSTHOOK: query: SHOW MATERIALIZED VIEWS FROM `database` LIKE "fooview" POSTHOOK: type: SHOWMATERIALIZEDVIEWS +# MV Name Rewriting Enabled Mode +fooview Yes Manual refresh (Valid until source tables modified) + PREHOOK: query: DROP MATERIALIZED VIEW fooview PREHOOK: type: DROP_MATERIALIZED_VIEW POSTHOOK: query: DROP MATERIALIZED VIEW fooview