diff --git a/itests/src/test/resources/testconfiguration.properties b/itests/src/test/resources/testconfiguration.properties index 7259bd5d27..64003d0956 100644 --- a/itests/src/test/resources/testconfiguration.properties +++ b/itests/src/test/resources/testconfiguration.properties @@ -578,6 +578,7 @@ minillaplocal.query.files=\ materialized_view_rewrite_7.q,\ materialized_view_rewrite_8.q,\ materialized_view_rewrite_9.q,\ + materialized_view_rewrite_10.q,\ materialized_view_rewrite_part_1.q,\ materialized_view_rewrite_part_2.q,\ materialized_view_rewrite_ssb.q,\ diff --git a/ql/src/test/queries/clientpositive/materialized_view_rewrite_10.q b/ql/src/test/queries/clientpositive/materialized_view_rewrite_10.q new file mode 100644 index 0000000000..35c58ba0fc --- /dev/null +++ b/ql/src/test/queries/clientpositive/materialized_view_rewrite_10.q @@ -0,0 +1,62 @@ +-- SORT_QUERY_RESULTS + +set hive.support.concurrency=true; +set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager; +set hive.strict.checks.cartesian.product=false; +set hive.stats.fetch.column.stats=true; + +create table emps_n10 ( + empid int, + deptno int, + name varchar(256), + salary float, + commission int) +stored as orc TBLPROPERTIES ('transactional'='true'); +insert into emps_n10 values (100, 10, 'Bill', 10000, 1000), (200, 20, 'Eric', 8000, 500), + (150, 10, 'Sebastian', 7000, null), (110, 10, 'Theodore', 10000, 250), (110, 10, 'Bill', 10000, 250); +analyze table emps_n10 compute statistics for columns; + +-- EXAMPLE 1 +create materialized view mv1_n10 as +select deptno, sum(salary), count(salary) as a +from emps_n10 group by deptno; +analyze table mv1_n10 compute statistics for columns; + +explain +select deptno, avg(salary) as a +from emps_n10 group by deptno; + +select deptno, avg(salary) as a +from emps_n10 group by deptno; + +drop materialized view mv1_n10; + +-- EXAMPLE 2 +create materialized view mv1_n10 as +select salary, sum(salary), count(salary) as a +from emps_n10 group by salary; +analyze table mv1_n10 compute statistics for columns; + +explain +select salary, avg(salary) as a +from emps_n10 group by salary; + +select salary, avg(salary) as a +from emps_n10 group by salary; + +drop materialized view mv1_n10; + +-- EXAMPLE 3 +create materialized view mv1_n10 as +select salary, sum(salary), count(salary) as a +from emps_n10 where salary > 0 group by salary; +analyze table mv1_n10 compute statistics for columns; + +explain +select salary, avg(salary) as a +from emps_n10 where salary > 0 group by salary; + +select salary, avg(salary) as a +from emps_n10 where salary > 0 group by salary; + +drop materialized view mv1_n10; diff --git a/ql/src/test/results/clientpositive/llap/materialized_view_rewrite_10.q.out b/ql/src/test/results/clientpositive/llap/materialized_view_rewrite_10.q.out new file mode 100644 index 0000000000..6982646f74 --- /dev/null +++ b/ql/src/test/results/clientpositive/llap/materialized_view_rewrite_10.q.out @@ -0,0 +1,254 @@ +PREHOOK: query: create table emps_n10 ( + empid int, + deptno int, + name varchar(256), + salary float, + commission int) +stored as orc TBLPROPERTIES ('transactional'='true') +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@emps_n10 +POSTHOOK: query: create table emps_n10 ( + empid int, + deptno int, + name varchar(256), + salary float, + commission int) +stored as orc TBLPROPERTIES ('transactional'='true') +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@emps_n10 +PREHOOK: query: insert into emps_n10 values (100, 10, 'Bill', 10000, 1000), (200, 20, 'Eric', 8000, 500), + (150, 10, 'Sebastian', 7000, null), (110, 10, 'Theodore', 10000, 250), (110, 10, 'Bill', 10000, 250) +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +PREHOOK: Output: default@emps_n10 +POSTHOOK: query: insert into emps_n10 values (100, 10, 'Bill', 10000, 1000), (200, 20, 'Eric', 8000, 500), + (150, 10, 'Sebastian', 7000, null), (110, 10, 'Theodore', 10000, 250), (110, 10, 'Bill', 10000, 250) +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +POSTHOOK: Output: default@emps_n10 +POSTHOOK: Lineage: emps_n10.commission SCRIPT [] +POSTHOOK: Lineage: emps_n10.deptno SCRIPT [] +POSTHOOK: Lineage: emps_n10.empid SCRIPT [] +POSTHOOK: Lineage: emps_n10.name SCRIPT [] +POSTHOOK: Lineage: emps_n10.salary SCRIPT [] +PREHOOK: query: analyze table emps_n10 compute statistics for columns +PREHOOK: type: ANALYZE_TABLE +PREHOOK: Input: default@emps_n10 +PREHOOK: Output: default@emps_n10 +#### A masked pattern was here #### +POSTHOOK: query: analyze table emps_n10 compute statistics for columns +POSTHOOK: type: ANALYZE_TABLE +POSTHOOK: Input: default@emps_n10 +POSTHOOK: Output: default@emps_n10 +#### A masked pattern was here #### +PREHOOK: query: create materialized view mv1_n10 as +select deptno, sum(salary), count(salary) as a +from emps_n10 group by deptno +PREHOOK: type: CREATE_MATERIALIZED_VIEW +PREHOOK: Input: default@emps_n10 +PREHOOK: Output: database:default +PREHOOK: Output: default@mv1_n10 +POSTHOOK: query: create materialized view mv1_n10 as +select deptno, sum(salary), count(salary) as a +from emps_n10 group by deptno +POSTHOOK: type: CREATE_MATERIALIZED_VIEW +POSTHOOK: Input: default@emps_n10 +POSTHOOK: Output: database:default +POSTHOOK: Output: default@mv1_n10 +PREHOOK: query: analyze table mv1_n10 compute statistics for columns +PREHOOK: type: ANALYZE_TABLE +PREHOOK: Input: default@mv1_n10 +PREHOOK: Output: default@mv1_n10 +#### A masked pattern was here #### +POSTHOOK: query: analyze table mv1_n10 compute statistics for columns +POSTHOOK: type: ANALYZE_TABLE +POSTHOOK: Input: default@mv1_n10 +POSTHOOK: Output: default@mv1_n10 +#### A masked pattern was here #### +PREHOOK: query: explain +select deptno, avg(salary) as a +from emps_n10 group by deptno +PREHOOK: type: QUERY +POSTHOOK: query: explain +select deptno, avg(salary) as a +from emps_n10 group by deptno +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-0 + Fetch Operator + limit: -1 + Processor Tree: + TableScan + alias: default.mv1_n10 + Select Operator + expressions: deptno (type: int), (_c1 / a) (type: double) + outputColumnNames: _col0, _col1 + ListSink + +PREHOOK: query: select deptno, avg(salary) as a +from emps_n10 group by deptno +PREHOOK: type: QUERY +PREHOOK: Input: default@emps_n10 +PREHOOK: Input: default@mv1_n10 +#### A masked pattern was here #### +POSTHOOK: query: select deptno, avg(salary) as a +from emps_n10 group by deptno +POSTHOOK: type: QUERY +POSTHOOK: Input: default@emps_n10 +POSTHOOK: Input: default@mv1_n10 +#### A masked pattern was here #### +10 9250.0 +20 8000.0 +PREHOOK: query: drop materialized view mv1_n10 +PREHOOK: type: DROP_MATERIALIZED_VIEW +PREHOOK: Input: default@mv1_n10 +PREHOOK: Output: default@mv1_n10 +POSTHOOK: query: drop materialized view mv1_n10 +POSTHOOK: type: DROP_MATERIALIZED_VIEW +POSTHOOK: Input: default@mv1_n10 +POSTHOOK: Output: default@mv1_n10 +PREHOOK: query: create materialized view mv1_n10 as +select salary, sum(salary), count(salary) as a +from emps_n10 group by salary +PREHOOK: type: CREATE_MATERIALIZED_VIEW +PREHOOK: Input: default@emps_n10 +PREHOOK: Output: database:default +PREHOOK: Output: default@mv1_n10 +POSTHOOK: query: create materialized view mv1_n10 as +select salary, sum(salary), count(salary) as a +from emps_n10 group by salary +POSTHOOK: type: CREATE_MATERIALIZED_VIEW +POSTHOOK: Input: default@emps_n10 +POSTHOOK: Output: database:default +POSTHOOK: Output: default@mv1_n10 +PREHOOK: query: analyze table mv1_n10 compute statistics for columns +PREHOOK: type: ANALYZE_TABLE +PREHOOK: Input: default@mv1_n10 +PREHOOK: Output: default@mv1_n10 +#### A masked pattern was here #### +POSTHOOK: query: analyze table mv1_n10 compute statistics for columns +POSTHOOK: type: ANALYZE_TABLE +POSTHOOK: Input: default@mv1_n10 +POSTHOOK: Output: default@mv1_n10 +#### A masked pattern was here #### +PREHOOK: query: explain +select salary, avg(salary) as a +from emps_n10 group by salary +PREHOOK: type: QUERY +POSTHOOK: query: explain +select salary, avg(salary) as a +from emps_n10 group by salary +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-0 + Fetch Operator + limit: -1 + Processor Tree: + TableScan + alias: default.mv1_n10 + Select Operator + expressions: salary (type: float), (_c1 / a) (type: double) + outputColumnNames: _col0, _col1 + ListSink + +PREHOOK: query: select salary, avg(salary) as a +from emps_n10 group by salary +PREHOOK: type: QUERY +PREHOOK: Input: default@emps_n10 +PREHOOK: Input: default@mv1_n10 +#### A masked pattern was here #### +POSTHOOK: query: select salary, avg(salary) as a +from emps_n10 group by salary +POSTHOOK: type: QUERY +POSTHOOK: Input: default@emps_n10 +POSTHOOK: Input: default@mv1_n10 +#### A masked pattern was here #### +10000.0 10000.0 +7000.0 7000.0 +8000.0 8000.0 +PREHOOK: query: drop materialized view mv1_n10 +PREHOOK: type: DROP_MATERIALIZED_VIEW +PREHOOK: Input: default@mv1_n10 +PREHOOK: Output: default@mv1_n10 +POSTHOOK: query: drop materialized view mv1_n10 +POSTHOOK: type: DROP_MATERIALIZED_VIEW +POSTHOOK: Input: default@mv1_n10 +POSTHOOK: Output: default@mv1_n10 +PREHOOK: query: create materialized view mv1_n10 as +select salary, sum(salary), count(salary) as a +from emps_n10 where salary > 0 group by salary +PREHOOK: type: CREATE_MATERIALIZED_VIEW +PREHOOK: Input: default@emps_n10 +PREHOOK: Output: database:default +PREHOOK: Output: default@mv1_n10 +POSTHOOK: query: create materialized view mv1_n10 as +select salary, sum(salary), count(salary) as a +from emps_n10 where salary > 0 group by salary +POSTHOOK: type: CREATE_MATERIALIZED_VIEW +POSTHOOK: Input: default@emps_n10 +POSTHOOK: Output: database:default +POSTHOOK: Output: default@mv1_n10 +PREHOOK: query: analyze table mv1_n10 compute statistics for columns +PREHOOK: type: ANALYZE_TABLE +PREHOOK: Input: default@mv1_n10 +PREHOOK: Output: default@mv1_n10 +#### A masked pattern was here #### +POSTHOOK: query: analyze table mv1_n10 compute statistics for columns +POSTHOOK: type: ANALYZE_TABLE +POSTHOOK: Input: default@mv1_n10 +POSTHOOK: Output: default@mv1_n10 +#### A masked pattern was here #### +PREHOOK: query: explain +select salary, avg(salary) as a +from emps_n10 where salary > 0 group by salary +PREHOOK: type: QUERY +POSTHOOK: query: explain +select salary, avg(salary) as a +from emps_n10 where salary > 0 group by salary +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-0 + Fetch Operator + limit: -1 + Processor Tree: + TableScan + alias: default.mv1_n10 + Select Operator + expressions: salary (type: float), (_c1 / a) (type: double) + outputColumnNames: _col0, _col1 + ListSink + +PREHOOK: query: select salary, avg(salary) as a +from emps_n10 where salary > 0 group by salary +PREHOOK: type: QUERY +PREHOOK: Input: default@emps_n10 +PREHOOK: Input: default@mv1_n10 +#### A masked pattern was here #### +POSTHOOK: query: select salary, avg(salary) as a +from emps_n10 where salary > 0 group by salary +POSTHOOK: type: QUERY +POSTHOOK: Input: default@emps_n10 +POSTHOOK: Input: default@mv1_n10 +#### A masked pattern was here #### +10000.0 10000.0 +7000.0 7000.0 +8000.0 8000.0 +PREHOOK: query: drop materialized view mv1_n10 +PREHOOK: type: DROP_MATERIALIZED_VIEW +PREHOOK: Input: default@mv1_n10 +PREHOOK: Output: default@mv1_n10 +POSTHOOK: query: drop materialized view mv1_n10 +POSTHOOK: type: DROP_MATERIALIZED_VIEW +POSTHOOK: Input: default@mv1_n10 +POSTHOOK: Output: default@mv1_n10