From 4cf1bf4d95d6eec534c5ae4f56073faad3d12bd2 Mon Sep 17 00:00:00 2001 From: ShubhamChaurasia Date: Wed, 16 Jan 2019 11:15:16 +0530 Subject: [PATCH 1/2] HIVE-21126: Allow session level queries in LlapBaseInputFormat#getSplits() before actual get_splits() call --- .../apache/hadoop/hive/llap/LlapBaseInputFormat.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/llap-ext-client/src/java/org/apache/hadoop/hive/llap/LlapBaseInputFormat.java b/llap-ext-client/src/java/org/apache/hadoop/hive/llap/LlapBaseInputFormat.java index ef03be660e72..6d727a190ced 100644 --- a/llap-ext-client/src/java/org/apache/hadoop/hive/llap/LlapBaseInputFormat.java +++ b/llap-ext-client/src/java/org/apache/hadoop/hive/llap/LlapBaseInputFormat.java @@ -114,6 +114,7 @@ public class LlapBaseInputFormat> public static final String PWD_KEY = "llap.if.pwd"; public static final String HANDLE_ID = "llap.if.handleid"; public static final String DB_KEY = "llap.if.database"; + public static final String SESSION_QUERIES_FOR_GET_NUM_SPLITS = "llap.session.queries.for.get.num.splits"; public final String SPLIT_QUERY = "select get_splits(\"%s\",%d)"; public static final LlapServiceInstance[] serviceInstanceArray = new LlapServiceInstance[0]; @@ -259,6 +260,15 @@ public InputSplit[] getSplits(JobConf job, int numSplits) throws IOException { if (database != null && !database.isEmpty()) { stmt.execute("USE " + database); } + String sessionQueries = job.get(SESSION_QUERIES_FOR_GET_NUM_SPLITS); + if (sessionQueries != null && !sessionQueries.trim().isEmpty()) { + String[] queries = sessionQueries.trim().split(","); + for (String q : queries) { + LOG.debug("Executing session query: {}", q); + stmt.execute(q); + } + } + ResultSet res = stmt.executeQuery(sql); while (res.next()) { // deserialize split From 87e960bf93bdf63d87cd7fff608da9ed9bbacc39 Mon Sep 17 00:00:00 2001 From: ShubhamChaurasia Date: Wed, 16 Jan 2019 13:48:02 +0530 Subject: [PATCH 2/2] HIVE-21126: Only SET queries will be executed, other will be filtered out --- .../apache/hadoop/hive/llap/LlapBaseInputFormat.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/llap-ext-client/src/java/org/apache/hadoop/hive/llap/LlapBaseInputFormat.java b/llap-ext-client/src/java/org/apache/hadoop/hive/llap/LlapBaseInputFormat.java index 6d727a190ced..30f372003f01 100644 --- a/llap-ext-client/src/java/org/apache/hadoop/hive/llap/LlapBaseInputFormat.java +++ b/llap-ext-client/src/java/org/apache/hadoop/hive/llap/LlapBaseInputFormat.java @@ -37,6 +37,7 @@ import java.util.Set; import java.util.UUID; import java.util.concurrent.LinkedBlockingQueue; +import java.util.regex.Pattern; import org.apache.commons.collections4.ListUtils; import org.apache.hadoop.hive.conf.HiveConf; @@ -115,6 +116,7 @@ public class LlapBaseInputFormat> public static final String HANDLE_ID = "llap.if.handleid"; public static final String DB_KEY = "llap.if.database"; public static final String SESSION_QUERIES_FOR_GET_NUM_SPLITS = "llap.session.queries.for.get.num.splits"; + public static final Pattern SET_QUERY_PATTERN = Pattern.compile("^\\s*set\\s+.*=.+$", Pattern.CASE_INSENSITIVE); public final String SPLIT_QUERY = "select get_splits(\"%s\",%d)"; public static final LlapServiceInstance[] serviceInstanceArray = new LlapServiceInstance[0]; @@ -264,8 +266,13 @@ public InputSplit[] getSplits(JobConf job, int numSplits) throws IOException { if (sessionQueries != null && !sessionQueries.trim().isEmpty()) { String[] queries = sessionQueries.trim().split(","); for (String q : queries) { - LOG.debug("Executing session query: {}", q); - stmt.execute(q); + //allow only set queries + if (SET_QUERY_PATTERN.matcher(q).matches()) { + LOG.debug("Executing session query: {}", q); + stmt.execute(q); + } else { + LOG.warn("Only SET queries are allowed, not executing this query: {}", q); + } } }