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 8aa971a639..f72e08c14f 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 @@ -2799,7 +2799,7 @@ private int showTablesOrViews(Hive db, ShowTablesDesc showDesc) throws HiveExcep 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)); + materializedViews.addAll(db.getMaterializedViewObjectsByPattern(dbName, pattern)); 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); 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 50e8c14ac0..e75cda22a9 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 @@ -1310,6 +1310,17 @@ public Table getTable(final String dbName, final String tableName, return getTableObjects(dbName, ".*", TableType.MATERIALIZED_VIEW); } + /** + * Get materialized views for the specified database that match the provided regex pattern. + * @param dbName + * @param pattern + * @return List of materialized view table objects + * @throws HiveException + */ + public List getMaterializedViewObjectsByPattern(String dbName, String pattern) throws HiveException { + return getTableObjects(dbName, pattern, TableType.MATERIALIZED_VIEW); + } + private List
getTableObjects(String dbName, String pattern, TableType tableType) throws HiveException { try { return Lists.transform(getMSC().getTableObjectsByName(dbName, getTablesByType(dbName, pattern, tableType)), diff --git a/ql/src/test/queries/clientpositive/show_materialized_views.q b/ql/src/test/queries/clientpositive/show_materialized_views.q index 7c91b2eb5e..c6ae0210b7 100644 --- a/ql/src/test/queries/clientpositive/show_materialized_views.q +++ b/ql/src/test/queries/clientpositive/show_materialized_views.q @@ -30,9 +30,9 @@ SELECT * FROM shtb_test2 where KEY > 100 and KEY < 200; USE test1; SHOW MATERIALIZED VIEWS; -SHOW MATERIALIZED VIEWS 'test_*'; +SHOW MATERIALIZED VIEWS '*test*'; SHOW MATERIALIZED VIEWS '*view2'; -SHOW MATERIALIZED VIEWS LIKE 'test_view1|test_view2'; +SHOW MATERIALIZED VIEWS LIKE 'shtb_test1_view1|shtb_test1_view2'; USE test2; SHOW MATERIALIZED VIEWS 'shtb_*'; @@ -43,7 +43,7 @@ SHOW MATERIALIZED VIEWS FROM test1; SHOW MATERIALIZED VIEWS FROM test2; SHOW MATERIALIZED VIEWS IN test1; SHOW MATERIALIZED VIEWS IN default; -SHOW MATERIALIZED VIEWS IN test1 "shtb_test_*"; +SHOW MATERIALIZED VIEWS IN test1 "shtb_test*"; DESCRIBE FORMATTED test1.shtb_full_view2; DESCRIBE FORMATTED test1.shtb_test1_view1; DESCRIBE FORMATTED test1.shtb_test1_view2; 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 2a00902ee0..6f5ba6a0e4 100644 --- a/ql/src/test/results/clientpositive/show_materialized_views.q.out +++ b/ql/src/test/results/clientpositive/show_materialized_views.q.out @@ -131,12 +131,11 @@ 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: query: SHOW MATERIALIZED VIEWS '*test*' PREHOOK: type: SHOWMATERIALIZEDVIEWS -POSTHOOK: query: SHOW MATERIALIZED VIEWS 'test_*' +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) @@ -146,15 +145,13 @@ POSTHOOK: query: SHOW MATERIALIZED VIEWS '*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: SHOW MATERIALIZED VIEWS LIKE 'test_view1|test_view2' +PREHOOK: query: SHOW MATERIALIZED VIEWS LIKE 'shtb_test1_view1|shtb_test1_view2' PREHOOK: type: SHOWMATERIALIZEDVIEWS -POSTHOOK: query: SHOW MATERIALIZED VIEWS LIKE 'test_view1|test_view2' +POSTHOOK: query: SHOW MATERIALIZED VIEWS LIKE 'shtb_test1_view1|shtb_test1_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) @@ -208,12 +205,11 @@ PREHOOK: query: SHOW MATERIALIZED VIEWS IN default PREHOOK: type: SHOWMATERIALIZEDVIEWS POSTHOOK: query: SHOW MATERIALIZED VIEWS IN default POSTHOOK: type: SHOWMATERIALIZEDVIEWS -PREHOOK: query: SHOW MATERIALIZED VIEWS IN test1 "shtb_test_*" +PREHOOK: query: SHOW MATERIALIZED VIEWS IN test1 "shtb_test*" PREHOOK: type: SHOWMATERIALIZEDVIEWS -POSTHOOK: query: SHOW MATERIALIZED VIEWS IN test1 "shtb_test_*" +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) @@ -343,10 +339,6 @@ 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