You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by na...@apache.org on 2009/12/04 03:21:40 UTC
svn commit: r887036 [1/3] - in /hadoop/hive/trunk: ./
common/src/java/org/apache/hadoop/hive/conf/ conf/
ql/src/java/org/apache/hadoop/hive/ql/
ql/src/java/org/apache/hadoop/hive/ql/exec/
ql/src/test/queries/clientpositive/ ql/src/test/results/clientpo...
Author: namit
Date: Fri Dec 4 02:21:39 2009
New Revision: 887036
URL: http://svn.apache.org/viewvc?rev=887036&view=rev
Log:
HIVE-549. Run independent tasks for a query in parallel.
(Chaitanya Mishra via namit)
Added:
hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskResult.java
hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskRunner.java
Modified:
hadoop/hive/trunk/CHANGES.txt
hadoop/hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
hadoop/hive/trunk/conf/hive-default.xml
hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/ExecDriver.java
hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/Task.java
hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
hadoop/hive/trunk/ql/src/test/queries/clientpositive/input41.q
hadoop/hive/trunk/ql/src/test/queries/clientpositive/input42.q
hadoop/hive/trunk/ql/src/test/queries/clientpositive/input_part9.q
hadoop/hive/trunk/ql/src/test/results/clientpositive/input41.q.out
hadoop/hive/trunk/ql/src/test/results/clientpositive/input42.q.out
hadoop/hive/trunk/ql/src/test/results/clientpositive/input_part9.q.out
Modified: hadoop/hive/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/CHANGES.txt?rev=887036&r1=887035&r2=887036&view=diff
==============================================================================
--- hadoop/hive/trunk/CHANGES.txt (original)
+++ hadoop/hive/trunk/CHANGES.txt Fri Dec 4 02:21:39 2009
@@ -81,6 +81,9 @@
HIVE-870. Add table functions. (Paul Yang via namit)
+ HIVE-549. Run independent tasks for a query in parallel.
+ (Chaitanya Mishra via namit)
+
IMPROVEMENTS
HIVE-760. Add version info to META-INF/MANIFEST.MF.
Modified: hadoop/hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java?rev=887036&r1=887035&r2=887036&view=diff
==============================================================================
--- hadoop/hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java (original)
+++ hadoop/hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java Fri Dec 4 02:21:39 2009
@@ -70,7 +70,8 @@
MAXREDUCERS("hive.exec.reducers.max", 999),
PREEXECHOOKS("hive.exec.pre.hooks", ""),
POSTEXECHOOKS("hive.exec.post.hooks", ""),
-
+ EXECPARALLEL("hive.exec.parallel",false), // parallel query launching
+
// hadoop stuff
HADOOPBIN("hadoop.bin.path", System.getenv("HADOOP_HOME") + "/bin/hadoop"),
HADOOPCONF("hadoop.config.dir", System.getenv("HADOOP_HOME") + "/conf"),
Modified: hadoop/hive/trunk/conf/hive-default.xml
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/conf/hive-default.xml?rev=887036&r1=887035&r2=887036&view=diff
==============================================================================
--- hadoop/hive/trunk/conf/hive-default.xml (original)
+++ hadoop/hive/trunk/conf/hive-default.xml Fri Dec 4 02:21:39 2009
@@ -299,6 +299,12 @@
</property>
<property>
+ <name>hive.exec.parallel</name>
+ <value>false</value>
+ <description>Whether to execute jobs in parallel</description>
+</property>
+
+<property>
<name>hive.hwi.listen.host</name>
<value>0.0.0.0</value>
<description>This is the host address the Hive Web Interface will listen on</description>
Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/Driver.java?rev=887036&r1=887035&r2=887036&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/Driver.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/Driver.java Fri Dec 4 02:21:39 2009
@@ -40,6 +40,8 @@
import org.apache.hadoop.hive.ql.session.SessionState.LogHelper;
import org.apache.hadoop.hive.ql.exec.ExecDriver;
import org.apache.hadoop.hive.ql.exec.Task;
+import org.apache.hadoop.hive.ql.exec.TaskRunner;
+import org.apache.hadoop.hive.ql.exec.TaskResult;
import org.apache.hadoop.hive.ql.exec.FetchTask;
import org.apache.hadoop.hive.ql.exec.TaskFactory;
import org.apache.hadoop.hive.ql.exec.Utilities;
@@ -75,6 +77,10 @@
private String errorMessage;
private String SQLState;
+ // A limit on the number of threads that can be launched
+ private int maxthreads = 8;
+ private int sleeptime = 2000;
+
public int countJobs(List<Task<? extends Serializable>> tasks) {
return countJobs(tasks, new ArrayList<Task<? extends Serializable>>());
}
@@ -389,6 +395,8 @@
.getVar(HiveConf.ConfVars.HADOOPJOBNAME));
int maxlen = conf.getIntVar(HiveConf.ConfVars.HIVEJOBNAMELENGTH);
+ int curJobNo=0;
+
String queryId = plan.getQueryId();
String queryStr = plan.getQueryStr();
@@ -426,62 +434,58 @@
}
String jobname = Utilities.abbreviate(queryStr, maxlen - 6);
- int curJobNo = 0;
+ // A runtime that launches runnable tasks as separate Threads through TaskRunners
+ // As soon as a task isRunnable, it is put in a queue
+ // At any time, at most maxthreads tasks can be running
+ // The main thread polls the TaskRunners to check if they have finished.
- // A very simple runtime that keeps putting runnable tasks on a list and
- // when a job completes, it puts the children at the back of the list
- // while taking the job to run from the front of the list
Queue<Task<? extends Serializable>> runnable = new LinkedList<Task<? extends Serializable>>();
+ Map<TaskResult, TaskRunner> running = new HashMap<TaskResult, TaskRunner> ();
- for (Task<? extends Serializable> rootTask : sem.getRootTasks()) {
- if (runnable.offer(rootTask) == false) {
- LOG.error("Could not insert the first task into the queue");
- return (1);
- }
+ //Add root Tasks to runnable
+
+ for (Task<? extends Serializable> tsk : sem.getRootTasks()) {
+ addToRunnable(runnable,tsk);
}
- while (runnable.peek() != null) {
- Task<? extends Serializable> tsk = runnable.remove();
- if (SessionState.get() != null) {
- SessionState.get().getHiveHistory().startTask(queryId, tsk,
- tsk.getClass().getName());
- }
- if (tsk.isMapRedTask()) {
- curJobNo++;
- if (noName) {
- conf.setVar(HiveConf.ConfVars.HADOOPJOBNAME, jobname + "(" + curJobNo
- + "/" + jobs + ")");
- }
- }
+ // Loop while you either have tasks running, or tasks queued up
- tsk.initialize(conf, plan);
- int exitVal = tsk.executeTask();
- if (SessionState.get() != null) {
- SessionState.get().getHiveHistory().setTaskProperty(queryId,
- tsk.getId(), Keys.TASK_RET_CODE, String.valueOf(exitVal));
- SessionState.get().getHiveHistory().endTask(queryId, tsk);
+ while (running.size() != 0 || runnable.peek()!=null) {
+ // Launch upto maxthreads tasks
+ while(runnable.peek() != null && running.size() < maxthreads) {
+ Task<? extends Serializable> tsk = runnable.remove();
+ curJobNo = launchTask(tsk, queryId, noName,running, jobname, jobs, curJobNo);
}
- if (exitVal != 0) {
+
+ // poll the Tasks to see which one completed
+ TaskResult tskRes = pollTasks(running.keySet());
+ TaskRunner tskRun = running.remove(tskRes);
+ Task<? extends Serializable> tsk = tskRun.getTask();
+
+ int exitVal = tskRes.getExitVal();
+ if(exitVal != 0) {
//TODO: This error messaging is not very informative. Fix that.
errorMessage = "FAILED: Execution Error, return code " + exitVal
+ " from " + tsk.getClass().getName();
SQLState = "08S01";
console.printError(errorMessage);
+ if(running.size() !=0) {
+ taskCleanup();
+ }
return 9;
}
- if (tsk.getChildTasks() == null) {
- continue;
+ if (SessionState.get() != null) {
+ SessionState.get().getHiveHistory().setTaskProperty(queryId,
+ tsk.getId(), Keys.TASK_RET_CODE, String.valueOf(exitVal));
+ SessionState.get().getHiveHistory().endTask(queryId, tsk);
}
- for (Task<? extends Serializable> child : tsk.getChildTasks()) {
- // Check if the child is runnable
- if (!child.isRunnable()) {
- continue;
- }
-
- if (runnable.offer(child) == false) {
- LOG.error("Could not add child task to queue");
+ if (tsk.getChildTasks() != null) {
+ for (Task<? extends Serializable> child : tsk.getChildTasks()) {
+ if(isLaunchable(child)) {
+ addToRunnable(runnable,child);
+ }
}
}
}
@@ -528,6 +532,114 @@
return (0);
}
+ /**
+ * Launches a new task
+ *
+ * @param tsk task being launched
+ * @param queryId Id of the query containing the task
+ * @param noName whether the task has a name set
+ * @param running map from taskresults to taskrunners
+ * @param jobname name of the task, if it is a map-reduce job
+ * @param jobs number of map-reduce jobs
+ * @param curJobNo the sequential number of the next map-reduce job
+ * @return the updated number of last the map-reduce job launched
+ */
+
+
+
+ public int launchTask(Task<? extends Serializable> tsk, String queryId,
+ boolean noName, Map<TaskResult,TaskRunner> running, String jobname,
+ int jobs, int curJobNo) {
+
+ if (SessionState.get() != null) {
+ SessionState.get().getHiveHistory().startTask(queryId, tsk,
+ tsk.getClass().getName());
+ }
+ if (tsk.isMapRedTask()) {
+ if (noName) {
+ conf.setVar(HiveConf.ConfVars.HADOOPJOBNAME, jobname + "("
+ + tsk.getId() + ")");
+ }
+ curJobNo++;
+ console.printInfo("Launching Job " + curJobNo + " out of "+jobs);
+ }
+ tsk.initialize(conf, plan);
+ TaskResult tskRes = new TaskResult();
+ TaskRunner tskRun = new TaskRunner(tsk,tskRes);
+
+ //Launch Task
+ if(HiveConf.getBoolVar(conf, HiveConf.ConfVars.EXECPARALLEL) && tsk.isMapRedTask()) {
+ // Launch it in the parallel mode, as a separate thread only for MR tasks
+ tskRun.start();
+ }
+ else
+ {
+ tskRun.runSequential();
+ }
+ running.put(tskRes,tskRun);
+ return curJobNo;
+ }
+
+
+ /**
+ * Cleans up remaining tasks in case of failure
+ */
+
+ public void taskCleanup() {
+ // The currently existing Shutdown hooks will be automatically called,
+ // killing the map-reduce processes.
+ // The non MR processes will be killed as well.
+ System.exit(9);
+ }
+
+ /**
+ * Polls running tasks to see if a task has ended.
+ *
+ * @param results Set of result objects for running tasks
+ * @return The result object for any completed/failed task
+ */
+
+ public TaskResult pollTasks(Set<TaskResult> results) {
+ Iterator<TaskResult> resultIterator = results.iterator();
+ while(true) {
+ while(resultIterator.hasNext()) {
+ TaskResult tskRes = resultIterator.next();
+ if(tskRes.isRunning() == false) {
+ return tskRes;
+ }
+ }
+
+ // In this loop, nothing was found
+ // Sleep 10 seconds and restart
+ try {
+ Thread.sleep(sleeptime);
+ }
+ catch (InterruptedException ie) {
+ //Do Nothing
+ ;
+ }
+ resultIterator = results.iterator();
+ }
+ }
+
+ /**
+ * Checks if a task can be launched
+ *
+ * @param tsk the task to be checked
+ * @return true if the task is launchable, false otherwise
+ */
+
+ public boolean isLaunchable(Task<? extends Serializable> tsk) {
+ // A launchable task is one that hasn't been queued, hasn't been initialized, and is runnable.
+ return !tsk.getQueued() && !tsk.getInitialized() && tsk.isRunnable();
+ }
+
+ public void addToRunnable(Queue<Task<? extends Serializable>> runnable,
+ Task<? extends Serializable> tsk) {
+ runnable.add(tsk);
+ tsk.setQueued();
+ }
+
public boolean getResults(Vector<String> res) throws IOException {
if (plan != null && plan.getPlan().getFetchTask() != null) {
BaseSemanticAnalyzer sem = plan.getPlan();
Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/ExecDriver.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/ExecDriver.java?rev=887036&r1=887035&r2=887036&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/ExecDriver.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/ExecDriver.java Fri Dec 4 02:21:39 2009
@@ -67,7 +67,8 @@
transient protected JobConf job;
transient protected int mapProgress = 0;
transient protected int reduceProgress = 0;
-
+
+ public static Random randGen = new Random();
/**
* Constructor when invoked from QL
*/
@@ -145,7 +146,8 @@
* used to kill all running jobs in the event of an unexpected shutdown -
* i.e., the JVM shuts down while there are still jobs running.
*/
- public static HashMap<String, String> runningJobKillURIs = new HashMap<String, String>();
+ public static Map<String, String> runningJobKillURIs
+ = Collections.synchronizedMap(new HashMap<String, String>());
/**
* In Hive, when the user control-c's the command line, any running jobs
@@ -160,22 +162,24 @@
"webinterface.private.actions", false)) {
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
- for (Iterator<String> elems = runningJobKillURIs.values().iterator(); elems
- .hasNext();) {
- String uri = elems.next();
- try {
- System.err.println("killing job with: " + uri);
- java.net.HttpURLConnection conn = (java.net.HttpURLConnection)
- new java.net.URL(uri).openConnection();
- conn.setRequestMethod("POST");
- int retCode = conn.getResponseCode();
- if (retCode != 200) {
- System.err.println("Got an error trying to kill job with URI: "
- + uri + " = " + retCode);
+ synchronized(runningJobKillURIs) {
+ for (Iterator<String> elems = runningJobKillURIs.values().iterator(); elems
+ .hasNext();) {
+ String uri = elems.next();
+ try {
+ System.err.println("killing job with: " + uri);
+ java.net.HttpURLConnection conn = (java.net.HttpURLConnection)
+ new java.net.URL(uri).openConnection();
+ conn.setRequestMethod("POST");
+ int retCode = conn.getResponseCode();
+ if (retCode != 200) {
+ System.err.println("Got an error trying to kill job with URI: "
+ + uri + " = " + retCode);
+ }
+ } catch (Exception e) {
+ System.err.println("trying to kill job, caught: " + e);
+ // do nothing
}
- } catch (Exception e) {
- System.err.println("trying to kill job, caught: " + e);
- // do nothing
}
}
}
@@ -247,7 +251,7 @@
th.setRunningJob(jc.getJob(rj.getJobID()));
updateCounters(th);
- String report = " map = " + this.mapProgress + "%, reduce = " + this.reduceProgress + "%";
+ String report = " "+getId()+" map = " + this.mapProgress + "%, reduce = " + this.reduceProgress + "%";
if (!report.equals(lastReport)
|| System.currentTimeMillis() >= reportTime + maxReportInterval) {
@@ -489,8 +493,17 @@
RunningJob rj = null, orig_rj = null;
boolean success = false;
+ boolean noName = StringUtils.isEmpty(HiveConf.
+ getVar(job,HiveConf.ConfVars.HADOOPJOBNAME));
+
+ if(noName) {
+ // This is for a special case to ensure unit tests pass
+ HiveConf.setVar(job,HiveConf.ConfVars.HADOOPJOBNAME, "JOB"+randGen.nextInt());
+ }
+
try {
addInputPaths(job, work, emptyScratchDirStr);
+
Utilities.setMapRedWork(job, work);
// remove the pwd from conf file so that job tracker doesn't show this logs
@@ -536,6 +549,7 @@
console.printInfo(statusMesg);
}
} catch (Exception e) {
+ e.printStackTrace();
String mesg = " with exception '" + Utilities.getNameMessage(e) + "'";
if (rj != null) {
mesg = "Ended Job = " + rj.getJobID() + mesg;
Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/Task.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/Task.java?rev=887036&r1=887035&r2=887036&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/Task.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/Task.java Fri Dec 4 02:21:39 2009
@@ -40,7 +40,9 @@
private static final long serialVersionUID = 1L;
transient protected boolean started;
+ transient protected boolean initialized;
transient protected boolean isdone;
+ transient protected boolean queued;
transient protected HiveConf conf;
transient protected Hive db;
transient protected Log LOG;
@@ -57,6 +59,8 @@
public Task() {
isdone = false;
started = false;
+ initialized = false;
+ queued = false;
LOG = LogFactory.getLog(this.getClass().getName());
this.taskCounters = new HashMap<String, Long>();
}
@@ -65,6 +69,7 @@
this.queryPlan = queryPlan;
isdone = false;
started = false;
+ setInitialized();
this.conf = conf;
try {
@@ -191,6 +196,22 @@
isdone = true;
}
+ public void setQueued() {
+ queued = true;
+ }
+
+ public boolean getQueued() {
+ return queued;
+ }
+
+ public void setInitialized() {
+ initialized = true;
+ }
+
+ public boolean getInitialized() {
+ return initialized;
+ }
+
public boolean isRunnable() {
boolean isrunnable = true;
if (parentTasks != null) {
Added: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskResult.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskResult.java?rev=887036&view=auto
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskResult.java (added)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskResult.java Fri Dec 4 02:21:39 2009
@@ -0,0 +1,51 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hive.ql.exec;
+
+import java.util.*;
+
+/**
+ * TaskResult implementation
+ **/
+
+public class TaskResult {
+ protected int exitVal;
+ protected boolean runStatus;
+ public TaskResult() {
+ exitVal = -1;
+ setRunning(true);
+ }
+
+ public void setExitVal(int exitVal) {
+ this.exitVal = exitVal;
+ setRunning(false);
+ }
+
+ public int getExitVal() {
+ return exitVal;
+ }
+
+ public boolean isRunning() {
+ return runStatus;
+ }
+
+ public void setRunning(boolean val) {
+ runStatus = val;
+ }
+}
Added: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskRunner.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskRunner.java?rev=887036&view=auto
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskRunner.java (added)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskRunner.java Fri Dec 4 02:21:39 2009
@@ -0,0 +1,69 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hive.ql.exec;
+
+import java.io.*;
+import java.util.*;
+import org.apache.hadoop.hive.conf.HiveConf;
+import org.apache.hadoop.hive.ql.QueryPlan;
+import org.apache.hadoop.hive.ql.metadata.Hive;
+import org.apache.hadoop.hive.ql.metadata.HiveException;
+import org.apache.hadoop.hive.ql.session.SessionState;
+import org.apache.hadoop.hive.ql.session.SessionState.LogHelper;
+import org.apache.hadoop.util.StringUtils;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+
+/**
+ * TaskRunner implementation
+ **/
+
+public class TaskRunner extends Thread {
+ protected Task<? extends Serializable> tsk;
+ protected TaskResult result;
+ protected SessionState ss;
+
+ public TaskRunner(Task<? extends Serializable> tsk, TaskResult result) {
+ this.tsk = tsk;
+ this.result = result;
+ ss = SessionState.get();
+ }
+
+ public Task<? extends Serializable> getTask() {
+ return tsk;
+ }
+
+ public void run() {
+ SessionState.start(ss);
+ runSequential();
+ }
+
+ /**
+ * Launches a task, and sets its exit value in the result variable
+ */
+
+ public void runSequential() {
+ int exitVal = tsk.executeTask();
+ result.setExitVal(exitVal);
+ }
+
+
+}
Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java?rev=887036&r1=887035&r2=887036&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java Fri Dec 4 02:21:39 2009
@@ -70,7 +70,8 @@
*/
public static enum ReduceField { KEY, VALUE, ALIAS };
- private static volatile mapredWork gWork = null;
+ private static Map<String, mapredWork> gWorkMap=
+ Collections.synchronizedMap(new HashMap<String, mapredWork>());
static final private Log LOG = LogFactory.getLog(Utilities.class.getName());
public static void clearMapRedWork (Configuration job) {
@@ -88,22 +89,31 @@
} finally {
// where a single process works with multiple plans - we must clear
// the cache before working with the next plan.
- gWork = null;
+ synchronized(gWorkMap) {
+ gWorkMap.remove(getJobName(job));
+ }
}
}
public static mapredWork getMapRedWork (Configuration job) {
+ mapredWork gWork = null;
try {
+ synchronized(gWorkMap) {
+ gWork = gWorkMap.get(getJobName(job));
+ }
if(gWork == null) {
synchronized (Utilities.class) {
if(gWork != null)
return (gWork);
- InputStream in = new FileInputStream("HIVE_PLAN");
+ InputStream in = new FileInputStream("HIVE_PLAN"
+ +sanitizedJobId(job));
mapredWork ret = deserializeMapRedWork(in, job);
gWork = ret;
+ gWork.initialize();
+ gWorkMap.put(getJobName(job), gWork);
}
- gWork.initialize();
}
+
return (gWork);
} catch (Exception e) {
e.printStackTrace();
@@ -151,12 +161,13 @@
HiveConf.setVar(job, HiveConf.ConfVars.PLAN, planPath.toString());
// Set up distributed cache
DistributedCache.createSymlink(job);
- String uriWithLink = planPath.toUri().toString() + "#HIVE_PLAN";
+ String uriWithLink = planPath.toUri().toString() + "#HIVE_PLAN"
+ +sanitizedJobId(job);
DistributedCache.addCacheFile(new URI(uriWithLink), job);
// Cache the object in this process too so lookups don't hit the file system
synchronized (Utilities.class) {
- gWork = w;
- gWork.initialize();
+ w.initialize();
+ gWorkMap.put(getJobName(job),w);
}
} catch (Exception e) {
e.printStackTrace();
@@ -164,6 +175,26 @@
}
}
+ public static String getJobName( Configuration job) {
+ String s = HiveConf.getVar(job, HiveConf.ConfVars.HADOOPJOBNAME);
+ // This is just a backup case. We would like Hive to always have jobnames.
+ if(s == null) {
+ // There is no job name => we set one
+ s = "JOB"+randGen.nextInt();
+ HiveConf.setVar(job, HiveConf.ConfVars.HADOOPJOBNAME, s);
+ }
+ return s;
+ }
+
+ /**
+ * Returns a unique ID for the job.
+ */
+
+ public static int sanitizedJobId(Configuration job) {
+ String s = getJobName(job);
+ return s.hashCode();
+ }
+
public static void serializeTasks(Task<? extends Serializable> t, OutputStream out) {
XMLEncoder e = new XMLEncoder(out);
// workaround for java 1.5
@@ -785,6 +816,7 @@
}
return sb.toString();
}
+
/**
* Gets the default notification interval to send progress updates to the
* tracker. Useful for operators that may not output data for a while.
Modified: hadoop/hive/trunk/ql/src/test/queries/clientpositive/input41.q
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/queries/clientpositive/input41.q?rev=887036&r1=887035&r2=887036&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/test/queries/clientpositive/input41.q (original)
+++ hadoop/hive/trunk/ql/src/test/queries/clientpositive/input41.q Fri Dec 4 02:21:39 2009
@@ -1,14 +1,27 @@
set hive.mapred.mode=strict;
+create table dest_sp (cnt int);
+
+insert overwrite table dest_sp
select * from
- (select count(1) from src
+ (select count(1) as cnt from src
union all
- select count(1) from srcpart where ds = '2009-08-09'
+ select count(1) as cnt from srcpart where ds = '2009-08-09'
)x;
+
+select * from dest_sp x order by x.cnt limit 2;
+
+drop table dest_sp;
+create table dest_sp (key string, val string);
+insert overwrite table dest_sp
select * from
(select * from src
union all
select * from srcpart where ds = '2009-08-09'
)x;
+
+select * from dest_sp x order by x.key limit 10000;
+
+drop table dest_sp;
Modified: hadoop/hive/trunk/ql/src/test/queries/clientpositive/input42.q
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/queries/clientpositive/input42.q?rev=887036&r1=887035&r2=887036&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/test/queries/clientpositive/input42.q (original)
+++ hadoop/hive/trunk/ql/src/test/queries/clientpositive/input42.q Fri Dec 4 02:21:39 2009
@@ -1,16 +1,16 @@
explain extended
-select * from srcpart a where a.ds='2008-04-08';
+select * from srcpart a where a.ds='2008-04-08' order by a.key, a.hr;
-select * from srcpart a where a.ds='2008-04-08';
+select * from srcpart a where a.ds='2008-04-08' order by a.key, a.hr;
explain extended
-select * from srcpart a where a.ds='2008-04-08' and key < 200;
+select * from srcpart a where a.ds='2008-04-08' and key < 200 order by a.key, a.hr;
-select * from srcpart a where a.ds='2008-04-08' and key < 200;
+select * from srcpart a where a.ds='2008-04-08' and key < 200 order by a.key, a.hr;
explain extended
-select * from srcpart a where a.ds='2008-04-08' and rand(100) < 0.1;
+select * from srcpart a where a.ds='2008-04-08' and rand(100) < 0.1 order by a.key, a.hr;
-select * from srcpart a where a.ds='2008-04-08' and rand(100) < 0.1;
+select * from srcpart a where a.ds='2008-04-08' and rand(100) < 0.1 order by a.key, a.hr;
Modified: hadoop/hive/trunk/ql/src/test/queries/clientpositive/input_part9.q
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/queries/clientpositive/input_part9.q?rev=887036&r1=887035&r2=887036&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/test/queries/clientpositive/input_part9.q (original)
+++ hadoop/hive/trunk/ql/src/test/queries/clientpositive/input_part9.q Fri Dec 4 02:21:39 2009
@@ -1,5 +1,5 @@
EXPLAIN EXTENDED
-SELECT x.* FROM SRCPART x WHERE key IS NOT NULL AND ds = '2008-04-08';
+SELECT x.* FROM SRCPART x WHERE key IS NOT NULL AND ds = '2008-04-08' order by x.key, x.hr;
-SELECT x.* FROM SRCPART x WHERE key IS NOT NULL AND ds = '2008-04-08';
+SELECT x.* FROM SRCPART x WHERE key IS NOT NULL AND ds = '2008-04-08' order by x.key, x.hr;
Modified: hadoop/hive/trunk/ql/src/test/results/clientpositive/input41.q.out
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/results/clientpositive/input41.q.out?rev=887036&r1=887035&r2=887036&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/test/results/clientpositive/input41.q.out (original)
+++ hadoop/hive/trunk/ql/src/test/results/clientpositive/input41.q.out Fri Dec 4 02:21:39 2009
@@ -1,534 +1,574 @@
-PREHOOK: query: select * from
- (select count(1) from src
+PREHOOK: query: create table dest_sp (cnt int)
+PREHOOK: type: CREATETABLE
+POSTHOOK: query: create table dest_sp (cnt int)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: default@dest_sp
+PREHOOK: query: insert overwrite table dest_sp
+select * from
+ (select count(1) as cnt from src
union all
- select count(1) from srcpart where ds = '2009-08-09'
+ select count(1) as cnt from srcpart where ds = '2009-08-09'
)x
PREHOOK: type: QUERY
PREHOOK: Input: default@src
-PREHOOK: Output: file:/data/users/njain/hive5/hive5/build/ql/tmp/576939637/10000
-POSTHOOK: query: select * from
- (select count(1) from src
+PREHOOK: Output: default@dest_sp
+POSTHOOK: query: insert overwrite table dest_sp
+select * from
+ (select count(1) as cnt from src
union all
- select count(1) from srcpart where ds = '2009-08-09'
+ select count(1) as cnt from srcpart where ds = '2009-08-09'
)x
POSTHOOK: type: QUERY
POSTHOOK: Input: default@src
-POSTHOOK: Output: file:/data/users/njain/hive5/hive5/build/ql/tmp/576939637/10000
-500
+POSTHOOK: Output: default@dest_sp
+PREHOOK: query: select * from dest_sp x order by x.cnt limit 2
+PREHOOK: type: QUERY
+PREHOOK: Input: default@dest_sp
+PREHOOK: Output: file:/data/users/cmishra/apachehive/hive-trunk/build/ql/tmp/1746002792/10000
+POSTHOOK: query: select * from dest_sp x order by x.cnt limit 2
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@dest_sp
+POSTHOOK: Output: file:/data/users/cmishra/apachehive/hive-trunk/build/ql/tmp/1746002792/10000
0
-PREHOOK: query: select * from
+500
+PREHOOK: query: drop table dest_sp
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table dest_sp
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Output: default@dest_sp
+PREHOOK: query: create table dest_sp (key string, val string)
+PREHOOK: type: CREATETABLE
+POSTHOOK: query: create table dest_sp (key string, val string)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: default@dest_sp
+PREHOOK: query: insert overwrite table dest_sp
+select * from
(select * from src
union all
select * from srcpart where ds = '2009-08-09'
)x
PREHOOK: type: QUERY
PREHOOK: Input: default@src
-PREHOOK: Output: file:/data/users/njain/hive5/hive5/build/ql/tmp/563082762/10000
-POSTHOOK: query: select * from
+PREHOOK: Output: default@dest_sp
+POSTHOOK: query: insert overwrite table dest_sp
+select * from
(select * from src
union all
select * from srcpart where ds = '2009-08-09'
)x
POSTHOOK: type: QUERY
POSTHOOK: Input: default@src
-POSTHOOK: Output: file:/data/users/njain/hive5/hive5/build/ql/tmp/563082762/10000
-238 val_238
-86 val_86
-311 val_311
-27 val_27
-165 val_165
-409 val_409
-255 val_255
-278 val_278
-98 val_98
-484 val_484
-265 val_265
-193 val_193
-401 val_401
-150 val_150
-273 val_273
-224 val_224
-369 val_369
-66 val_66
+POSTHOOK: Output: default@dest_sp
+PREHOOK: query: select * from dest_sp x order by x.key limit 10000
+PREHOOK: type: QUERY
+PREHOOK: Input: default@dest_sp
+PREHOOK: Output: file:/data/users/cmishra/apachehive/hive-trunk/build/ql/tmp/379757919/10000
+POSTHOOK: query: select * from dest_sp x order by x.key limit 10000
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@dest_sp
+POSTHOOK: Output: file:/data/users/cmishra/apachehive/hive-trunk/build/ql/tmp/379757919/10000
+0 val_0
+0 val_0
+0 val_0
+10 val_10
+100 val_100
+100 val_100
+103 val_103
+103 val_103
+104 val_104
+104 val_104
+105 val_105
+11 val_11
+111 val_111
+113 val_113
+113 val_113
+114 val_114
+116 val_116
+118 val_118
+118 val_118
+119 val_119
+119 val_119
+119 val_119
+12 val_12
+12 val_12
+120 val_120
+120 val_120
+125 val_125
+125 val_125
+126 val_126
128 val_128
-213 val_213
-146 val_146
-406 val_406
-429 val_429
-374 val_374
-152 val_152
-469 val_469
+128 val_128
+128 val_128
+129 val_129
+129 val_129
+131 val_131
+133 val_133
+134 val_134
+134 val_134
+136 val_136
+137 val_137
+137 val_137
+138 val_138
+138 val_138
+138 val_138
+138 val_138
+143 val_143
145 val_145
-495 val_495
-37 val_37
-327 val_327
-281 val_281
-277 val_277
-209 val_209
+146 val_146
+146 val_146
+149 val_149
+149 val_149
15 val_15
-82 val_82
-403 val_403
-166 val_166
-417 val_417
-430 val_430
-252 val_252
-292 val_292
-219 val_219
-287 val_287
+15 val_15
+150 val_150
+152 val_152
+152 val_152
153 val_153
-193 val_193
-338 val_338
-446 val_446
-459 val_459
-394 val_394
-237 val_237
-482 val_482
-174 val_174
-413 val_413
-494 val_494
-207 val_207
-199 val_199
-466 val_466
-208 val_208
-174 val_174
-399 val_399
-396 val_396
-247 val_247
-417 val_417
-489 val_489
+155 val_155
+156 val_156
+157 val_157
+158 val_158
+160 val_160
162 val_162
-377 val_377
-397 val_397
-309 val_309
-365 val_365
-266 val_266
-439 val_439
-342 val_342
-367 val_367
-325 val_325
+163 val_163
+164 val_164
+164 val_164
+165 val_165
+165 val_165
+166 val_166
167 val_167
-195 val_195
-475 val_475
+167 val_167
+167 val_167
+168 val_168
+169 val_169
+169 val_169
+169 val_169
+169 val_169
17 val_17
-113 val_113
-155 val_155
-203 val_203
-339 val_339
-0 val_0
-455 val_455
-128 val_128
-311 val_311
-316 val_316
-57 val_57
-302 val_302
-205 val_205
-149 val_149
-438 val_438
-345 val_345
-129 val_129
170 val_170
-20 val_20
-489 val_489
-157 val_157
-378 val_378
-221 val_221
-92 val_92
-111 val_111
-47 val_47
-72 val_72
-4 val_4
-280 val_280
-35 val_35
-427 val_427
-277 val_277
-208 val_208
-356 val_356
-399 val_399
-169 val_169
-382 val_382
-498 val_498
-125 val_125
-386 val_386
-437 val_437
-469 val_469
-192 val_192
-286 val_286
-187 val_187
+172 val_172
+172 val_172
+174 val_174
+174 val_174
+175 val_175
+175 val_175
176 val_176
-54 val_54
-459 val_459
-51 val_51
-138 val_138
-103 val_103
-239 val_239
-213 val_213
-216 val_216
-430 val_430
-278 val_278
176 val_176
-289 val_289
-221 val_221
-65 val_65
-318 val_318
-332 val_332
-311 val_311
-275 val_275
-137 val_137
-241 val_241
-83 val_83
-333 val_333
+177 val_177
+178 val_178
+179 val_179
+179 val_179
+18 val_18
+18 val_18
180 val_180
-284 val_284
-12 val_12
-230 val_230
181 val_181
-67 val_67
-260 val_260
-404 val_404
-384 val_384
-489 val_489
-353 val_353
-373 val_373
-272 val_272
-138 val_138
-217 val_217
-84 val_84
-348 val_348
-466 val_466
-58 val_58
-8 val_8
-411 val_411
-230 val_230
-208 val_208
-348 val_348
-24 val_24
-463 val_463
-431 val_431
-179 val_179
-172 val_172
-42 val_42
-129 val_129
-158 val_158
-119 val_119
-496 val_496
-0 val_0
-322 val_322
-197 val_197
-468 val_468
-393 val_393
-454 val_454
-100 val_100
-298 val_298
-199 val_199
+183 val_183
+186 val_186
+187 val_187
+187 val_187
+187 val_187
+189 val_189
+19 val_19
+190 val_190
191 val_191
-418 val_418
-96 val_96
-26 val_26
-165 val_165
-327 val_327
-230 val_230
-205 val_205
-120 val_120
-131 val_131
-51 val_51
-404 val_404
-43 val_43
-436 val_436
-156 val_156
-469 val_469
-468 val_468
-308 val_308
-95 val_95
+191 val_191
+192 val_192
+193 val_193
+193 val_193
+193 val_193
+194 val_194
+195 val_195
+195 val_195
196 val_196
-288 val_288
-481 val_481
-457 val_457
-98 val_98
-282 val_282
197 val_197
-187 val_187
-318 val_318
-318 val_318
-409 val_409
-470 val_470
-137 val_137
-369 val_369
-316 val_316
-169 val_169
-413 val_413
-85 val_85
-77 val_77
-0 val_0
-490 val_490
-87 val_87
-364 val_364
-179 val_179
-118 val_118
-134 val_134
-395 val_395
-282 val_282
-138 val_138
-238 val_238
-419 val_419
-15 val_15
-118 val_118
-72 val_72
-90 val_90
-307 val_307
-19 val_19
-435 val_435
-10 val_10
-277 val_277
-273 val_273
-306 val_306
+197 val_197
+199 val_199
+199 val_199
+199 val_199
+2 val_2
+20 val_20
+200 val_200
+200 val_200
+201 val_201
+202 val_202
+203 val_203
+203 val_203
+205 val_205
+205 val_205
+207 val_207
+207 val_207
+208 val_208
+208 val_208
+208 val_208
+209 val_209
+209 val_209
+213 val_213
+213 val_213
+214 val_214
+216 val_216
+216 val_216
+217 val_217
+217 val_217
+218 val_218
+219 val_219
+219 val_219
+221 val_221
+221 val_221
+222 val_222
+223 val_223
+223 val_223
+224 val_224
224 val_224
-309 val_309
-389 val_389
-327 val_327
-242 val_242
-369 val_369
-392 val_392
-272 val_272
-331 val_331
-401 val_401
-242 val_242
-452 val_452
-177 val_177
226 val_226
-5 val_5
-497 val_497
-402 val_402
-396 val_396
-317 val_317
-395 val_395
-58 val_58
-35 val_35
-336 val_336
-95 val_95
-11 val_11
-168 val_168
-34 val_34
-229 val_229
-233 val_233
-143 val_143
-472 val_472
-322 val_322
-498 val_498
-160 val_160
-195 val_195
-42 val_42
-321 val_321
-430 val_430
-119 val_119
-489 val_489
-458 val_458
-78 val_78
-76 val_76
-41 val_41
-223 val_223
-492 val_492
-149 val_149
-449 val_449
-218 val_218
228 val_228
-138 val_138
-453 val_453
-30 val_30
-209 val_209
-64 val_64
-468 val_468
-76 val_76
-74 val_74
-342 val_342
-69 val_69
+229 val_229
+229 val_229
230 val_230
-33 val_33
-368 val_368
-103 val_103
-296 val_296
-113 val_113
-216 val_216
-367 val_367
-344 val_344
-167 val_167
-274 val_274
-219 val_219
+230 val_230
+230 val_230
+230 val_230
+230 val_230
+233 val_233
+233 val_233
+235 val_235
+237 val_237
+237 val_237
+238 val_238
+238 val_238
239 val_239
-485 val_485
-116 val_116
-223 val_223
+239 val_239
+24 val_24
+24 val_24
+241 val_241
+242 val_242
+242 val_242
+244 val_244
+247 val_247
+248 val_248
+249 val_249
+252 val_252
+255 val_255
+255 val_255
+256 val_256
256 val_256
+257 val_257
+258 val_258
+26 val_26
+26 val_26
+260 val_260
+262 val_262
263 val_263
-70 val_70
-487 val_487
-480 val_480
-401 val_401
-288 val_288
-191 val_191
-5 val_5
-244 val_244
-438 val_438
-128 val_128
-467 val_467
-432 val_432
-202 val_202
-316 val_316
-229 val_229
-469 val_469
-463 val_463
+265 val_265
+265 val_265
+266 val_266
+27 val_27
+272 val_272
+272 val_272
+273 val_273
+273 val_273
+273 val_273
+274 val_274
+275 val_275
+277 val_277
+277 val_277
+277 val_277
+277 val_277
+278 val_278
+278 val_278
+28 val_28
280 val_280
-2 val_2
-35 val_35
+280 val_280
+281 val_281
+281 val_281
+282 val_282
+282 val_282
283 val_283
-331 val_331
-235 val_235
-80 val_80
-44 val_44
-193 val_193
+284 val_284
+285 val_285
+286 val_286
+287 val_287
+288 val_288
+288 val_288
+289 val_289
+291 val_291
+292 val_292
+296 val_296
+298 val_298
+298 val_298
+298 val_298
+30 val_30
+302 val_302
+305 val_305
+306 val_306
+307 val_307
+307 val_307
+308 val_308
+309 val_309
+309 val_309
+310 val_310
+311 val_311
+311 val_311
+311 val_311
+315 val_315
+316 val_316
+316 val_316
+316 val_316
+317 val_317
+317 val_317
+318 val_318
+318 val_318
+318 val_318
+321 val_321
321 val_321
+322 val_322
+322 val_322
+323 val_323
+325 val_325
+325 val_325
+327 val_327
+327 val_327
+327 val_327
+33 val_33
+331 val_331
+331 val_331
+332 val_332
+333 val_333
+333 val_333
335 val_335
-104 val_104
-466 val_466
+336 val_336
+338 val_338
+339 val_339
+34 val_34
+341 val_341
+342 val_342
+342 val_342
+344 val_344
+344 val_344
+345 val_345
+348 val_348
+348 val_348
+348 val_348
+348 val_348
+348 val_348
+35 val_35
+35 val_35
+35 val_35
+351 val_351
+353 val_353
+353 val_353
+356 val_356
+360 val_360
+362 val_362
+364 val_364
+365 val_365
366 val_366
-175 val_175
-403 val_403
-483 val_483
-53 val_53
-105 val_105
-257 val_257
-406 val_406
-409 val_409
-190 val_190
-406 val_406
+367 val_367
+367 val_367
+368 val_368
+369 val_369
+369 val_369
+369 val_369
+37 val_37
+37 val_37
+373 val_373
+374 val_374
+375 val_375
+377 val_377
+378 val_378
+379 val_379
+382 val_382
+382 val_382
+384 val_384
+384 val_384
+384 val_384
+386 val_386
+389 val_389
+392 val_392
+393 val_393
+394 val_394
+395 val_395
+395 val_395
+396 val_396
+396 val_396
+396 val_396
+397 val_397
+397 val_397
+399 val_399
+399 val_399
+4 val_4
+400 val_400
401 val_401
-114 val_114
-258 val_258
-90 val_90
-203 val_203
-262 val_262
-348 val_348
+401 val_401
+401 val_401
+401 val_401
+401 val_401
+402 val_402
+403 val_403
+403 val_403
+403 val_403
+404 val_404
+404 val_404
+406 val_406
+406 val_406
+406 val_406
+406 val_406
+407 val_407
+409 val_409
+409 val_409
+409 val_409
+41 val_41
+411 val_411
+413 val_413
+413 val_413
+414 val_414
+414 val_414
+417 val_417
+417 val_417
+417 val_417
+418 val_418
+419 val_419
+42 val_42
+42 val_42
+421 val_421
424 val_424
-12 val_12
-396 val_396
-201 val_201
-217 val_217
-164 val_164
+424 val_424
+427 val_427
+429 val_429
+429 val_429
+43 val_43
+430 val_430
+430 val_430
+430 val_430
431 val_431
-454 val_454
-478 val_478
-298 val_298
-125 val_125
431 val_431
-164 val_164
-424 val_424
-187 val_187
-382 val_382
-5 val_5
-70 val_70
-397 val_397
-480 val_480
-291 val_291
-24 val_24
-351 val_351
-255 val_255
-104 val_104
-70 val_70
-163 val_163
+431 val_431
+432 val_432
+435 val_435
+436 val_436
+437 val_437
+438 val_438
+438 val_438
438 val_438
-119 val_119
-414 val_414
-200 val_200
-491 val_491
-237 val_237
439 val_439
-360 val_360
-248 val_248
-479 val_479
-305 val_305
-417 val_417
-199 val_199
-444 val_444
-120 val_120
-429 val_429
-169 val_169
+439 val_439
+44 val_44
443 val_443
-323 val_323
-325 val_325
-277 val_277
-230 val_230
-478 val_478
-178 val_178
-468 val_468
-310 val_310
-317 val_317
-333 val_333
-493 val_493
+444 val_444
+446 val_446
+448 val_448
+449 val_449
+452 val_452
+453 val_453
+454 val_454
+454 val_454
+454 val_454
+455 val_455
+457 val_457
+458 val_458
+458 val_458
+459 val_459
+459 val_459
460 val_460
-207 val_207
-249 val_249
-265 val_265
-480 val_480
-83 val_83
-136 val_136
-353 val_353
-172 val_172
-214 val_214
462 val_462
-233 val_233
-406 val_406
-133 val_133
-175 val_175
-189 val_189
-454 val_454
-375 val_375
-401 val_401
-421 val_421
-407 val_407
-384 val_384
-256 val_256
-26 val_26
-134 val_134
-67 val_67
-384 val_384
-379 val_379
-18 val_18
462 val_462
+463 val_463
+463 val_463
+466 val_466
+466 val_466
+466 val_466
+467 val_467
+468 val_468
+468 val_468
+468 val_468
+468 val_468
+469 val_469
+469 val_469
+469 val_469
+469 val_469
+469 val_469
+47 val_47
+470 val_470
+472 val_472
+475 val_475
+477 val_477
+478 val_478
+478 val_478
+479 val_479
+480 val_480
+480 val_480
+480 val_480
+481 val_481
+482 val_482
+483 val_483
+484 val_484
+485 val_485
+487 val_487
+489 val_489
+489 val_489
+489 val_489
+489 val_489
+490 val_490
+491 val_491
492 val_492
-100 val_100
-298 val_298
-9 val_9
-341 val_341
+492 val_492
+493 val_493
+494 val_494
+495 val_495
+496 val_496
+497 val_497
498 val_498
-146 val_146
-458 val_458
-362 val_362
-186 val_186
-285 val_285
-348 val_348
-167 val_167
-18 val_18
-273 val_273
-183 val_183
-281 val_281
-344 val_344
-97 val_97
-469 val_469
-315 val_315
+498 val_498
+498 val_498
+5 val_5
+5 val_5
+5 val_5
+51 val_51
+51 val_51
+53 val_53
+54 val_54
+57 val_57
+58 val_58
+58 val_58
+64 val_64
+65 val_65
+66 val_66
+67 val_67
+67 val_67
+69 val_69
+70 val_70
+70 val_70
+70 val_70
+72 val_72
+72 val_72
+74 val_74
+76 val_76
+76 val_76
+77 val_77
+78 val_78
+8 val_8
+80 val_80
+82 val_82
+83 val_83
+83 val_83
84 val_84
-28 val_28
-37 val_37
-448 val_448
-152 val_152
-348 val_348
-307 val_307
-194 val_194
-414 val_414
-477 val_477
-222 val_222
-126 val_126
+84 val_84
+85 val_85
+86 val_86
+87 val_87
+9 val_9
90 val_90
-169 val_169
-403 val_403
-400 val_400
-200 val_200
+90 val_90
+90 val_90
+92 val_92
+95 val_95
+95 val_95
+96 val_96
+97 val_97
97 val_97
+98 val_98
+98 val_98
+PREHOOK: query: drop table dest_sp
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table dest_sp
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Output: default@dest_sp