This is an automated email from the ASF dual-hosted git repository.
dkuzmenko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/master by this push:
new a57c402f579 HIVE-26821: Fetch task caching should only depend on fetch
task conversion (Sourabh Badhya, reviewed by Denys Kuzmenko)
a57c402f579 is described below
commit a57c402f579bb8665ce1f13c30cf47344a01b208
Author: Sourabh Badhya <[email protected]>
AuthorDate: Mon Dec 12 14:14:41 2022 +0530
HIVE-26821: Fetch task caching should only depend on fetch task conversion
(Sourabh Badhya, reviewed by Denys Kuzmenko)
Closes #3848
---
.../org/apache/hadoop/hive/ql/exec/FetchTask.java | 12 +++++++----
.../hive/ql/optimizer/SimpleFetchOptimizer.java | 2 ++
.../org/apache/hadoop/hive/ql/TestTxnCommands.java | 24 ++++++++++++++++++++++
3 files changed, 34 insertions(+), 4 deletions(-)
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchTask.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchTask.java
index 61157c35a60..1d7581f2f9b 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchTask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchTask.java
@@ -18,7 +18,6 @@
package org.apache.hadoop.hive.ql.exec;
-import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hadoop.hive.ql.Context;
import org.apache.hadoop.hive.ql.QueryPlan;
import org.apache.hadoop.hive.ql.QueryState;
@@ -55,7 +54,7 @@ public class FetchTask extends Task<FetchWork> implements
Serializable {
private int totalRows;
private static final Logger LOG = LoggerFactory.getLogger(FetchTask.class);
JobConf job = null;
- private boolean cachingEnabled;
+ private boolean cachingEnabled = false;
public FetchTask() {
super();
@@ -69,8 +68,6 @@ public class FetchTask extends Task<FetchWork> implements
Serializable {
public void initialize(QueryState queryState, QueryPlan queryPlan, TaskQueue
taskQueue, Context context) {
super.initialize(queryState, queryPlan, taskQueue, context);
work.initializeForFetch(context.getOpContext());
-
- cachingEnabled = HiveConf.getBoolVar(conf,
HiveConf.ConfVars.HIVEFETCHTASKCACHING);
fetchedData = new ArrayList<>();
try {
@@ -236,4 +233,11 @@ public class FetchTask extends Task<FetchWork> implements
Serializable {
ExecMapper.setDone(false);
}
+ public void setCachingEnabled(boolean cachingEnabled) {
+ this.cachingEnabled = cachingEnabled;
+ }
+
+ public boolean isCachingEnabled() {
+ return cachingEnabled;
+ }
}
\ No newline at end of file
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/SimpleFetchOptimizer.java
b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/SimpleFetchOptimizer.java
index 5464b4e2d40..83f6d9e7226 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/SimpleFetchOptimizer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/SimpleFetchOptimizer.java
@@ -143,6 +143,8 @@ public class SimpleFetchOptimizer extends Transform {
if (fetch != null && checkThreshold(fetch, limit, pctx)) {
FetchWork fetchWork = fetch.convertToWork();
FetchTask fetchTask = (FetchTask) TaskFactory.get(fetchWork);
+ fetchTask.setCachingEnabled(HiveConf.getBoolVar(pctx.getConf(),
+ HiveConf.ConfVars.HIVEFETCHTASKCACHING));
fetchWork.setSink(fetch.completed(pctx, fetchWork));
fetchWork.setSource(source);
fetchWork.setLimit(limit);
diff --git a/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands.java
b/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands.java
index 95b42dd5be3..2240b99b114 100644
--- a/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands.java
@@ -2498,4 +2498,28 @@ public class TestTxnCommands extends
TxnCommandsBaseForTests {
runStatementOnDriver("alter table "+dbName+"."+tbName+" PARTITION ("
+partition+") compact '"+compactiontype + "'" );
TestTxnCommands2.runWorker(hiveConf);
}
+
+ @Test
+ public void testFetchTaskCachingWithConversion() throws Exception {
+ dropTable(new String[]{"fetch_task_table"});
+ List actualRes = new ArrayList<>();
+ runStatementOnDriver("create table fetch_task_table (a INT, b INT) stored
as orc" +
+ " tblproperties ('transactional'='true')");
+ runStatementOnDriver("insert into table fetch_task_table values (1,2),
(3,4), (5,6)");
+ List expectedRes = runStatementOnDriver("select * from fetch_task_table");
+
+ hiveConf.setBoolVar(HiveConf.ConfVars.HIVEFETCHTASKCACHING, true);
+ hiveConf.setVar(HiveConf.ConfVars.HIVEFETCHTASKCONVERSION, "none");
+ d.run("select * from fetch_task_table");
+ Assert.assertFalse(d.getFetchTask().isCachingEnabled());
+ d.getFetchTask().fetch(actualRes);
+ Assert.assertEquals(actualRes, expectedRes);
+ actualRes.clear();
+
+ hiveConf.setVar(HiveConf.ConfVars.HIVEFETCHTASKCONVERSION, "more");
+ d.run("select * from fetch_task_table");
+ Assert.assertTrue(d.getFetchTask().isCachingEnabled());
+ d.getFetchTask().fetch(actualRes);
+ Assert.assertEquals(actualRes, expectedRes);
+ }
}