Repository: hive
Updated Branches:
  refs/heads/master 075077d3c -> 1733a3712


http://git-wip-us.apache.org/repos/asf/hive/blob/1733a371/ql/src/test/results/clientpositive/results_cache_temptable.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/results_cache_temptable.q.out 
b/ql/src/test/results/clientpositive/results_cache_temptable.q.out
new file mode 100644
index 0000000..5350dba
--- /dev/null
+++ b/ql/src/test/results/clientpositive/results_cache_temptable.q.out
@@ -0,0 +1,293 @@
+PREHOOK: query: create table rct (key string, value string)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@rct
+POSTHOOK: query: create table rct (key string, value string)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@rct
+PREHOOK: query: load data local inpath '../../data/files/kv1.txt' overwrite 
into table rct
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@rct
+POSTHOOK: query: load data local inpath '../../data/files/kv1.txt' overwrite 
into table rct
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@rct
+PREHOOK: query: create table rct_part (key string, value string) partitioned 
by (ds string)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@rct_part
+POSTHOOK: query: create table rct_part (key string, value string) partitioned 
by (ds string)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@rct_part
+PREHOOK: query: load data local inpath '../../data/files/kv1.txt' overwrite 
into table rct_part partition (ds="2008-04-08")
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@rct_part
+POSTHOOK: query: load data local inpath '../../data/files/kv1.txt' overwrite 
into table rct_part partition (ds="2008-04-08")
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@rct_part
+POSTHOOK: Output: default@rct_part@ds=2008-04-08
+PREHOOK: query: load data local inpath '../../data/files/kv1.txt' overwrite 
into table rct_part partition (ds="2008-04-09")
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@rct_part
+POSTHOOK: query: load data local inpath '../../data/files/kv1.txt' overwrite 
into table rct_part partition (ds="2008-04-09")
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@rct_part
+POSTHOOK: Output: default@rct_part@ds=2008-04-09
+PREHOOK: query: create temporary table tmptab as select * from src
+PREHOOK: type: CREATETABLE_AS_SELECT
+PREHOOK: Input: default@src
+PREHOOK: Output: database:default
+PREHOOK: Output: default@tmptab
+POSTHOOK: query: create temporary table tmptab as select * from src
+POSTHOOK: type: CREATETABLE_AS_SELECT
+POSTHOOK: Input: default@src
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@tmptab
+PREHOOK: query: select count(*) from tmptab where key = 0
+PREHOOK: type: QUERY
+PREHOOK: Input: default@tmptab
+#### A masked pattern was here ####
+POSTHOOK: query: select count(*) from tmptab where key = 0
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@tmptab
+#### A masked pattern was here ####
+3
+test.comment="Query involving temp tables should not be added to the cache"
+PREHOOK: query: explain
+select count(*) from tmptab where key = 0
+PREHOOK: type: QUERY
+POSTHOOK: query: explain
+select count(*) from tmptab where key = 0
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Map Reduce
+      Map Operator Tree:
+          TableScan
+            alias: tmptab
+            Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE 
Column stats: NONE
+            Filter Operator
+              predicate: (UDFToDouble(key) = 0.0) (type: boolean)
+              Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE 
Column stats: NONE
+              Select Operator
+                Statistics: Num rows: 250 Data size: 2656 Basic stats: 
COMPLETE Column stats: NONE
+                Group By Operator
+                  aggregations: count()
+                  mode: hash
+                  outputColumnNames: _col0
+                  Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE 
Column stats: NONE
+                  Reduce Output Operator
+                    sort order: 
+                    Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE 
Column stats: NONE
+                    value expressions: _col0 (type: bigint)
+      Reduce Operator Tree:
+        Group By Operator
+          aggregations: count(VALUE._col0)
+          mode: mergepartial
+          outputColumnNames: _col0
+          Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column 
stats: NONE
+          File Output Operator
+            compressed: false
+            Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column 
stats: NONE
+            table:
+                input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+                output format: 
org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: select count(*) from rct where key = 0
+PREHOOK: type: QUERY
+PREHOOK: Input: default@rct
+#### A masked pattern was here ####
+POSTHOOK: query: select count(*) from rct where key = 0
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@rct
+#### A masked pattern was here ####
+3
+test.comment="Query should use the cache"
+PREHOOK: query: explain
+select count(*) from rct where key = 0
+PREHOOK: type: QUERY
+POSTHOOK: query: explain
+select count(*) from rct where key = 0
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+  Stage-0 is a root stage
+
+STAGE PLANS:
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+      Cached Query Result: true
+
+PREHOOK: query: create temporary table rct as select * from tmptab
+PREHOOK: type: CREATETABLE_AS_SELECT
+PREHOOK: Input: default@tmptab
+PREHOOK: Output: database:default
+PREHOOK: Output: default@rct
+POSTHOOK: query: create temporary table rct as select * from tmptab
+POSTHOOK: type: CREATETABLE_AS_SELECT
+POSTHOOK: Input: default@tmptab
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@rct
+test.comment="Cached query does not get used now that it resolves to a temp 
table"
+PREHOOK: query: explain
+select count(*) from rct where key = 0
+PREHOOK: type: QUERY
+POSTHOOK: query: explain
+select count(*) from rct where key = 0
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Map Reduce
+      Map Operator Tree:
+          TableScan
+            alias: rct
+            Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE 
Column stats: NONE
+            Filter Operator
+              predicate: (UDFToDouble(key) = 0.0) (type: boolean)
+              Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE 
Column stats: NONE
+              Select Operator
+                Statistics: Num rows: 250 Data size: 2656 Basic stats: 
COMPLETE Column stats: NONE
+                Group By Operator
+                  aggregations: count()
+                  mode: hash
+                  outputColumnNames: _col0
+                  Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE 
Column stats: NONE
+                  Reduce Output Operator
+                    sort order: 
+                    Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE 
Column stats: NONE
+                    value expressions: _col0 (type: bigint)
+      Reduce Operator Tree:
+        Group By Operator
+          aggregations: count(VALUE._col0)
+          mode: mergepartial
+          outputColumnNames: _col0
+          Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column 
stats: NONE
+          File Output Operator
+            compressed: false
+            Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column 
stats: NONE
+            table:
+                input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+                output format: 
org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: select count(*) from rct_part where ds="2008-04-08" and key = 0
+PREHOOK: type: QUERY
+PREHOOK: Input: default@rct_part
+PREHOOK: Input: default@rct_part@ds=2008-04-08
+#### A masked pattern was here ####
+POSTHOOK: query: select count(*) from rct_part where ds="2008-04-08" and key = 0
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@rct_part
+POSTHOOK: Input: default@rct_part@ds=2008-04-08
+#### A masked pattern was here ####
+3
+test.comment="Query should use the cache"
+PREHOOK: query: explain
+select count(*) from rct_part where ds="2008-04-08" and key = 0
+PREHOOK: type: QUERY
+POSTHOOK: query: explain
+select count(*) from rct_part where ds="2008-04-08" and key = 0
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+  Stage-0 is a root stage
+
+STAGE PLANS:
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+      Cached Query Result: true
+
+PREHOOK: query: create temporary table rct_part as select key, value, 
"2008-04-08" as ds from tmptab
+PREHOOK: type: CREATETABLE_AS_SELECT
+PREHOOK: Input: default@tmptab
+PREHOOK: Output: database:default
+PREHOOK: Output: default@rct_part
+POSTHOOK: query: create temporary table rct_part as select key, value, 
"2008-04-08" as ds from tmptab
+POSTHOOK: type: CREATETABLE_AS_SELECT
+POSTHOOK: Input: default@tmptab
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@rct_part
+test.comment="Cached query does not get used now that it resolves to a temp 
table"
+PREHOOK: query: explain
+select count(*) from rct_part where ds="2008-04-08" and key = 0
+PREHOOK: type: QUERY
+POSTHOOK: query: explain
+select count(*) from rct_part where ds="2008-04-08" and key = 0
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Map Reduce
+      Map Operator Tree:
+          TableScan
+            alias: rct_part
+            Statistics: Num rows: 500 Data size: 10812 Basic stats: COMPLETE 
Column stats: NONE
+            Filter Operator
+              predicate: ((UDFToDouble(key) = 0.0) and (ds = '2008-04-08')) 
(type: boolean)
+              Statistics: Num rows: 125 Data size: 2703 Basic stats: COMPLETE 
Column stats: NONE
+              Select Operator
+                Statistics: Num rows: 125 Data size: 2703 Basic stats: 
COMPLETE Column stats: NONE
+                Group By Operator
+                  aggregations: count()
+                  mode: hash
+                  outputColumnNames: _col0
+                  Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE 
Column stats: NONE
+                  Reduce Output Operator
+                    sort order: 
+                    Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE 
Column stats: NONE
+                    value expressions: _col0 (type: bigint)
+      Reduce Operator Tree:
+        Group By Operator
+          aggregations: count(VALUE._col0)
+          mode: mergepartial
+          outputColumnNames: _col0
+          Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column 
stats: NONE
+          File Output Operator
+            compressed: false
+            Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column 
stats: NONE
+            table:
+                input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+                output format: 
org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+

http://git-wip-us.apache.org/repos/asf/hive/blob/1733a371/ql/src/test/results/clientpositive/results_cache_with_masking.q.out
----------------------------------------------------------------------
diff --git 
a/ql/src/test/results/clientpositive/results_cache_with_masking.q.out 
b/ql/src/test/results/clientpositive/results_cache_with_masking.q.out
new file mode 100644
index 0000000..3a0b2cc
--- /dev/null
+++ b/ql/src/test/results/clientpositive/results_cache_with_masking.q.out
@@ -0,0 +1,106 @@
+PREHOOK: query: create table masking_test as select cast(key as int) as key, 
value from src
+PREHOOK: type: CREATETABLE_AS_SELECT
+PREHOOK: Input: default@src
+PREHOOK: Output: database:default
+PREHOOK: Output: default@masking_test
+POSTHOOK: query: create table masking_test as select cast(key as int) as key, 
value from src
+POSTHOOK: type: CREATETABLE_AS_SELECT
+POSTHOOK: Input: default@src
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@masking_test
+POSTHOOK: Lineage: masking_test.key EXPRESSION [(src)src.FieldSchema(name:key, 
type:string, comment:default), ]
+POSTHOOK: Lineage: masking_test.value SIMPLE [(src)src.FieldSchema(name:value, 
type:string, comment:default), ]
+PREHOOK: query: explain
+select key, count(*) from masking_test group by key
+PREHOOK: type: QUERY
+POSTHOOK: query: explain
+select key, count(*) from masking_test group by key
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Map Reduce
+      Map Operator Tree:
+          TableScan
+            alias: masking_test
+            Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE 
Column stats: NONE
+            Filter Operator
+              predicate: (((key % 2) = 0) and (key < 10)) (type: boolean)
+              Statistics: Num rows: 83 Data size: 881 Basic stats: COMPLETE 
Column stats: NONE
+              Group By Operator
+                aggregations: count()
+                keys: key (type: int)
+                mode: hash
+                outputColumnNames: _col0, _col1
+                Statistics: Num rows: 83 Data size: 881 Basic stats: COMPLETE 
Column stats: NONE
+                Reduce Output Operator
+                  key expressions: _col0 (type: int)
+                  sort order: +
+                  Map-reduce partition columns: _col0 (type: int)
+                  Statistics: Num rows: 83 Data size: 881 Basic stats: 
COMPLETE Column stats: NONE
+                  value expressions: _col1 (type: bigint)
+      Reduce Operator Tree:
+        Group By Operator
+          aggregations: count(VALUE._col0)
+          keys: KEY._col0 (type: int)
+          mode: mergepartial
+          outputColumnNames: _col0, _col1
+          Statistics: Num rows: 41 Data size: 435 Basic stats: COMPLETE Column 
stats: NONE
+          File Output Operator
+            compressed: false
+            Statistics: Num rows: 41 Data size: 435 Basic stats: COMPLETE 
Column stats: NONE
+            table:
+                input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+                output format: 
org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: select key, count(*) from masking_test group by key
+PREHOOK: type: QUERY
+PREHOOK: Input: default@masking_test
+#### A masked pattern was here ####
+POSTHOOK: query: select key, count(*) from masking_test group by key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@masking_test
+#### A masked pattern was here ####
+0      3
+2      1
+4      1
+8      1
+PREHOOK: query: explain
+select key, count(*) from masking_test group by key
+PREHOOK: type: QUERY
+POSTHOOK: query: explain
+select key, count(*) from masking_test group by key
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+  Stage-0 is a root stage
+
+STAGE PLANS:
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+      Cached Query Result: true
+
+PREHOOK: query: select key, count(*) from masking_test group by key
+PREHOOK: type: QUERY
+PREHOOK: Input: default@masking_test
+#### A masked pattern was here ####
+POSTHOOK: query: select key, count(*) from masking_test group by key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@masking_test
+#### A masked pattern was here ####
+0      3
+2      1
+4      1
+8      1

http://git-wip-us.apache.org/repos/asf/hive/blob/1733a371/service/src/java/org/apache/hive/service/server/HiveServer2.java
----------------------------------------------------------------------
diff --git a/service/src/java/org/apache/hive/service/server/HiveServer2.java 
b/service/src/java/org/apache/hive/service/server/HiveServer2.java
index 2a528cd..2e57b60 100644
--- a/service/src/java/org/apache/hive/service/server/HiveServer2.java
+++ b/service/src/java/org/apache/hive/service/server/HiveServer2.java
@@ -61,6 +61,7 @@ import 
org.apache.hadoop.hive.metastore.api.WMFullResourcePlan;
 import org.apache.hadoop.hive.metastore.api.WMPool;
 import org.apache.hadoop.hive.metastore.api.WMResourcePlan;
 import org.apache.hadoop.hive.metastore.cache.CachedStore;
+import org.apache.hadoop.hive.ql.cache.results.QueryResultsCache;
 import org.apache.hadoop.hive.ql.exec.spark.session.SparkSessionManagerImpl;
 import org.apache.hadoop.hive.ql.exec.tez.TezSessionPoolManager;
 import org.apache.hadoop.hive.ql.exec.tez.WorkloadManager;
@@ -191,6 +192,15 @@ public class HiveServer2 extends CompositeService {
     // Create views registry
     HiveMaterializedViewsRegistry.get().init();
 
+    // Setup cache if enabled.
+    if 
(hiveConf.getBoolVar(HiveConf.ConfVars.HIVE_QUERY_RESULTS_CACHE_ENABLED)) {
+      try {
+        QueryResultsCache.initialize(hiveConf);
+      } catch (Exception err) {
+        throw new RuntimeException("Error initializing the query results 
cache", err);
+      }
+    }
+
     // Setup web UI
     try {
       int webUIPort =

Reply via email to