You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by jv...@apache.org on 2010/07/27 02:15:44 UTC

svn commit: r979488 - in /hadoop/hive/trunk: ./ ql/src/java/org/apache/hadoop/hive/ql/udf/generic/ ql/src/test/queries/clientpositive/ ql/src/test/results/clientpositive/

Author: jvs
Date: Tue Jul 27 00:15:44 2010
New Revision: 979488

URL: http://svn.apache.org/viewvc?rev=979488&view=rev
Log:
HIVE-1470. percentile_approx() fails with more than 1 reducer
(Mayank Lahiri via jvs)


Modified:
    hadoop/hive/trunk/CHANGES.txt
    hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFPercentileApprox.java
    hadoop/hive/trunk/ql/src/test/queries/clientpositive/udaf_percentile_approx.q
    hadoop/hive/trunk/ql/src/test/results/clientpositive/udaf_percentile_approx.q.out

Modified: hadoop/hive/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/CHANGES.txt?rev=979488&r1=979487&r2=979488&view=diff
==============================================================================
--- hadoop/hive/trunk/CHANGES.txt (original)
+++ hadoop/hive/trunk/CHANGES.txt Tue Jul 27 00:15:44 2010
@@ -74,12 +74,15 @@ Trunk -  Unreleased
     HIVE-1455. lateral view does not work with column pruning
     (Paul Yang via He Yongqiang)
 
+    HIVE-1470. percentile_approx() fails with more than 1 reducer
+    (Mayank Lahiri via jvs)
+
   TESTS
 
     HIVE-1464. improve  test query performance
     (Joydeep Sen Sarma via Ning Zhang)
 
-    HIVE-1475. .gitignore files being placed in test warehouse directories 
+    HIVE-1475. .gitignore files being placed in test warehouse directories
     causing build failure
     (Joydeep Sen Sarma via Ning Zhang)
 

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFPercentileApprox.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFPercentileApprox.java?rev=979488&r1=979487&r2=979488&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFPercentileApprox.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFPercentileApprox.java Tue Jul 27 00:15:44 2010
@@ -65,7 +65,7 @@ import org.apache.hadoop.util.StringUtil
                "this function.\n" +
                "Example (three percentiles requested using a finer histogram approximation):\n" +
                "> SELECT percentile_approx(val, array(0.5, 0.95, 0.98), 100000) FROM somedata;\n" +
-               "[0.05,1.64,2.26]\n" )
+               "[0.05,1.64,2.26]\n")
 public class GenericUDAFPercentileApprox implements GenericUDAFResolver {
   static final Log LOG = LogFactory.getLog(GenericUDAFPercentileApprox.class.getName());
 
@@ -98,6 +98,7 @@ public class GenericUDAFPercentileApprox
     }
 
     // Validate the second parameter, which is either a solitary double or an array of doubles.
+    boolean wantManyQuantiles = false;
     switch(parameters[1].getCategory()) {
     case PRIMITIVE:
       // Only a single double was passed as parameter 2, a single quantile is being requested
@@ -132,6 +133,7 @@ public class GenericUDAFPercentileApprox
           "A float/double array argument may be passed as parameter 2, but "
           + parameters[1].getTypeName() + " was passed instead.");
       }
+      wantManyQuantiles = true;
       break;
 
     default:
@@ -159,21 +161,16 @@ public class GenericUDAFPercentileApprox
       }
     }
 
-    return new GenericUDAFPercentileApproxEvaluator();
+    // Return an evaluator depending on the return type
+    if(wantManyQuantiles) {
+      return new GenericUDAFMultiplePercentileApproxEvaluator();
+    } else {
+      return new GenericUDAFSinglePercentileApproxEvaluator();
+    }
   }
-
-  /**
-   * Construct a histogram using the algorithm described by Ben-Haim and Tom-Tov, and then
-   * use it to compute an approximate percentile value.
-   */
-  public static class GenericUDAFPercentileApproxEvaluator extends GenericUDAFEvaluator {
-    // For PARTIAL1 and COMPLETE: ObjectInspectors for original data
-    private PrimitiveObjectInspector inputOI;
-    private ObjectInspector quantilesOI;
-    private PrimitiveObjectInspector nbinsOI;
-
-    // For PARTIAL2 and FINAL: ObjectInspectors for partial aggregations (list of doubles)
-    private StandardListObjectInspector loi;
+  
+  public static class GenericUDAFSinglePercentileApproxEvaluator extends
+    GenericUDAFPercentileApproxEvaluator {
 
     @Override
     public ObjectInspector init(Mode m, ObjectInspector[] parameters) throws HiveException {
@@ -196,20 +193,91 @@ public class GenericUDAFPercentileApprox
       // GenericUDAFHistogramNumeric, but we add on the percentile values requested to the
       // end, and handle serializing/deserializing before we pass things on to the parent
       // method.
-      // The return type for FINAL and COMPLETE is a full aggregation result, which is also a
-      // list of DoubleWritables with the requested quantile values. The only exception is
-      // when a single double, as opposed to an array of doubles, is passed as a parameter. In
-      // that case, just return a single double value.
-      if (m == Mode.PARTIAL1 || m == Mode.COMPLETE ||
-          quantilesOI.getCategory() == ObjectInspector.Category.LIST) {
+      // The return type for FINAL and COMPLETE is a full aggregation result, which is a
+      // single double value
+      if (m == Mode.PARTIAL1 || m == Mode.PARTIAL2) {
         return ObjectInspectorFactory.getStandardListObjectInspector(
-                 PrimitiveObjectInspectorFactory.writableDoubleObjectInspector);
+            PrimitiveObjectInspectorFactory.writableDoubleObjectInspector);
       } else {
         return PrimitiveObjectInspectorFactory.writableDoubleObjectInspector;
       }
     }
 
     @Override
+    public Object terminate(AggregationBuffer agg) throws HiveException {
+      PercentileAggBuf myagg = (PercentileAggBuf) agg;
+
+      if (myagg.histogram.getUsedBins() < 1) { // SQL standard - return null for zero elements
+        return null;
+      } else {
+        assert(myagg.quantiles != null);
+        return new DoubleWritable(myagg.histogram.quantile(myagg.quantiles[0]));
+      }
+    }
+  }
+
+  
+  public static class GenericUDAFMultiplePercentileApproxEvaluator extends
+    GenericUDAFPercentileApproxEvaluator {
+
+    @Override
+    public ObjectInspector init(Mode m, ObjectInspector[] parameters) throws HiveException {
+      super.init(m, parameters);
+
+      // init input object inspectors
+      if (m == Mode.PARTIAL1 || m == Mode.COMPLETE) {
+        inputOI = (PrimitiveObjectInspector) parameters[0];
+        quantilesOI = parameters[1];
+        if(parameters.length > 2) {
+          nbinsOI = (PrimitiveObjectInspector) parameters[2];
+        }
+      } else {
+        loi = (StandardListObjectInspector) parameters[0];
+      }
+
+      // Init output object inspectors.
+      //
+      // The return type for a partial aggregation is still a list of doubles, as in
+      // GenericUDAFHistogramNumeric, but we add on the percentile values requested to the
+      // end, and handle serializing/deserializing before we pass things on to the parent
+      // method.
+      // The return type for FINAL and COMPLETE is a full aggregation result, which is also
+      // a list of doubles
+      return ObjectInspectorFactory.getStandardListObjectInspector(
+          PrimitiveObjectInspectorFactory.writableDoubleObjectInspector);
+    }
+
+    @Override
+    public Object terminate(AggregationBuffer agg) throws HiveException {
+      PercentileAggBuf myagg = (PercentileAggBuf) agg;
+
+      if (myagg.histogram.getUsedBins() < 1) { // SQL standard - return null for zero elements
+        return null;
+      } else {
+        ArrayList<DoubleWritable> result = new ArrayList<DoubleWritable>();
+        assert(myagg.quantiles != null);
+        for(int i = 0; i < myagg.quantiles.length; i++) {
+          result.add(new DoubleWritable(myagg.histogram.quantile(myagg.quantiles[i])));
+        }
+        return result;
+      }
+    }
+  }
+
+  /**
+   * Construct a histogram using the algorithm described by Ben-Haim and Tom-Tov, and then
+   * use it to compute an approximate percentile value.
+   */
+  public abstract static class GenericUDAFPercentileApproxEvaluator extends GenericUDAFEvaluator {
+    // For PARTIAL1 and COMPLETE: ObjectInspectors for original data
+    protected PrimitiveObjectInspector inputOI;
+    protected ObjectInspector quantilesOI;
+    protected PrimitiveObjectInspector nbinsOI;
+
+    // For PARTIAL2 and FINAL: ObjectInspectors for partial aggregations (list of doubles)
+    protected StandardListObjectInspector loi;
+
+    @Override
     public void merge(AggregationBuffer agg, Object partial) throws HiveException {
       if(partial == null) { 
         return;
@@ -305,26 +373,6 @@ public class GenericUDAFPercentileApprox
       myagg.histogram.add(v);
     }
 
-    @Override
-    public Object terminate(AggregationBuffer agg) throws HiveException {
-      PercentileAggBuf myagg = (PercentileAggBuf) agg;
-
-      if (myagg.histogram.getUsedBins() < 1) { // SQL standard - return null for zero elements
-        return null;
-      } else {
-        ArrayList<DoubleWritable> result = new ArrayList<DoubleWritable>();
-        assert(myagg.quantiles != null);
-        for(int i = 0; i < myagg.quantiles.length; i++) {
-          result.add(new DoubleWritable(myagg.histogram.quantile(myagg.quantiles[i])));
-        }
-        if(myagg.quantiles.length == 1) {
-          return result.get(0);
-        } else {
-          return result;
-        }
-      }
-    }
-
     // Aggregation buffer methods. We wrap GenericUDAFHistogramNumeric's aggregation buffer
     // inside our own, so that we can also store requested quantile values between calls
     static class PercentileAggBuf implements AggregationBuffer {

Modified: hadoop/hive/trunk/ql/src/test/queries/clientpositive/udaf_percentile_approx.q
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/queries/clientpositive/udaf_percentile_approx.q?rev=979488&r1=979487&r2=979488&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/test/queries/clientpositive/udaf_percentile_approx.q (original)
+++ hadoop/hive/trunk/ql/src/test/queries/clientpositive/udaf_percentile_approx.q Tue Jul 27 00:15:44 2010
@@ -1,4 +1,6 @@
 
+set mapred.reduce.tasks=4
+set hive.exec.reducers.max=4
 SELECT percentile_approx(cast(substr(src.value,5) AS double), 0.5) FROM src;
 SELECT percentile_approx(cast(substr(src.value,5) AS double), 0.5, 100) FROM src;
 SELECT percentile_approx(cast(substr(src.value,5) AS double), 0.5, 1000) FROM src;

Modified: hadoop/hive/trunk/ql/src/test/results/clientpositive/udaf_percentile_approx.q.out
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/results/clientpositive/udaf_percentile_approx.q.out?rev=979488&r1=979487&r2=979488&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/test/results/clientpositive/udaf_percentile_approx.q.out (original)
+++ hadoop/hive/trunk/ql/src/test/results/clientpositive/udaf_percentile_approx.q.out Tue Jul 27 00:15:44 2010
@@ -1,108 +1,99 @@
-PREHOOK: query: SELECT percentile_approx(cast(substr(src.value,5) AS double), 0.5) FROM src
-PREHOOK: type: QUERY
-PREHOOK: Input: default@src
-PREHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-06-23_12-43-37_073_6076210560386322054/10000
-POSTHOOK: query: SELECT percentile_approx(cast(substr(src.value,5) AS double), 0.5) FROM src
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@src
-POSTHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-06-23_12-43-37_073_6076210560386322054/10000
-255.5
 PREHOOK: query: SELECT percentile_approx(cast(substr(src.value,5) AS double), 0.5, 100) FROM src
 PREHOOK: type: QUERY
 PREHOOK: Input: default@src
-PREHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-06-23_12-43-41_860_8275933713801449697/10000
+PREHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-07-26_14-08-04_416_834356939093099091/10000
 POSTHOOK: query: SELECT percentile_approx(cast(substr(src.value,5) AS double), 0.5, 100) FROM src
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@src
-POSTHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-06-23_12-43-41_860_8275933713801449697/10000
+POSTHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-07-26_14-08-04_416_834356939093099091/10000
 252.77777777777777
 PREHOOK: query: SELECT percentile_approx(cast(substr(src.value,5) AS double), 0.5, 1000) FROM src
 PREHOOK: type: QUERY
 PREHOOK: Input: default@src
-PREHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-06-23_12-43-46_334_9017578099479193081/10000
+PREHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-07-26_14-08-09_347_2669488651086861546/10000
 POSTHOOK: query: SELECT percentile_approx(cast(substr(src.value,5) AS double), 0.5, 1000) FROM src
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@src
-POSTHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-06-23_12-43-46_334_9017578099479193081/10000
+POSTHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-07-26_14-08-09_347_2669488651086861546/10000
 255.5
 PREHOOK: query: SELECT percentile_approx(cast(substr(src.value,5) AS int), 0.5) FROM src
 PREHOOK: type: QUERY
 PREHOOK: Input: default@src
-PREHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-06-23_12-43-51_723_1654864352248105322/10000
+PREHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-07-26_14-08-14_077_78739060255077214/10000
 POSTHOOK: query: SELECT percentile_approx(cast(substr(src.value,5) AS int), 0.5) FROM src
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@src
-POSTHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-06-23_12-43-51_723_1654864352248105322/10000
+POSTHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-07-26_14-08-14_077_78739060255077214/10000
 255.5
 PREHOOK: query: SELECT percentile_approx(cast(substr(src.value,5) AS int), 0.5, 100) FROM src
 PREHOOK: type: QUERY
 PREHOOK: Input: default@src
-PREHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-06-23_12-43-56_385_7799592520279056727/10000
+PREHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-07-26_14-08-18_671_141245215173795995/10000
 POSTHOOK: query: SELECT percentile_approx(cast(substr(src.value,5) AS int), 0.5, 100) FROM src
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@src
-POSTHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-06-23_12-43-56_385_7799592520279056727/10000
+POSTHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-07-26_14-08-18_671_141245215173795995/10000
 252.77777777777777
 PREHOOK: query: SELECT percentile_approx(cast(substr(src.value,5) AS int), 0.5, 1000) FROM src
 PREHOOK: type: QUERY
 PREHOOK: Input: default@src
-PREHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-06-23_12-44-00_946_3923666334878603072/10000
+PREHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-07-26_14-08-23_266_8933622767986547541/10000
 POSTHOOK: query: SELECT percentile_approx(cast(substr(src.value,5) AS int), 0.5, 1000) FROM src
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@src
-POSTHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-06-23_12-44-00_946_3923666334878603072/10000
+POSTHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-07-26_14-08-23_266_8933622767986547541/10000
 255.5
 PREHOOK: query: SELECT percentile_approx(cast(substr(src.value,5) AS double), array(0.05,0.5,0.95,0.98)) FROM src
 PREHOOK: type: QUERY
 PREHOOK: Input: default@src
-PREHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-06-23_12-44-05_574_6679873308435909842/10000
+PREHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-07-26_14-08-27_803_3529609176449051766/10000
 POSTHOOK: query: SELECT percentile_approx(cast(substr(src.value,5) AS double), array(0.05,0.5,0.95,0.98)) FROM src
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@src
-POSTHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-06-23_12-44-05_574_6679873308435909842/10000
+POSTHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-07-26_14-08-27_803_3529609176449051766/10000
 [26.0,255.5,479.0,491.0]
 PREHOOK: query: SELECT percentile_approx(cast(substr(src.value,5) AS double), array(0.05,0.5,0.95,0.98), 100) FROM src
 PREHOOK: type: QUERY
 PREHOOK: Input: default@src
-PREHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-06-23_12-44-10_350_1432232531700471217/10000
+PREHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-07-26_14-08-32_749_7874714977417965677/10000
 POSTHOOK: query: SELECT percentile_approx(cast(substr(src.value,5) AS double), array(0.05,0.5,0.95,0.98), 100) FROM src
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@src
-POSTHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-06-23_12-44-10_350_1432232531700471217/10000
+POSTHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-07-26_14-08-32_749_7874714977417965677/10000
 [24.07,252.77777777777777,476.9444444444444,487.82]
 PREHOOK: query: SELECT percentile_approx(cast(substr(src.value,5) AS double), array(0.05,0.5,0.95,0.98), 1000) FROM src
 PREHOOK: type: QUERY
 PREHOOK: Input: default@src
-PREHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-06-23_12-44-15_355_3332753751548479422/10000
+PREHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-07-26_14-08-37_425_1289670844459308120/10000
 POSTHOOK: query: SELECT percentile_approx(cast(substr(src.value,5) AS double), array(0.05,0.5,0.95,0.98), 1000) FROM src
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@src
-POSTHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-06-23_12-44-15_355_3332753751548479422/10000
+POSTHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-07-26_14-08-37_425_1289670844459308120/10000
 [26.0,255.5,479.0,491.0]
 PREHOOK: query: SELECT percentile_approx(cast(substr(src.value,5) AS int), array(0.05,0.5,0.95,0.98)) FROM src
 PREHOOK: type: QUERY
 PREHOOK: Input: default@src
-PREHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-06-23_12-44-19_897_625588204506780432/10000
+PREHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-07-26_14-08-42_578_6317460559415319067/10000
 POSTHOOK: query: SELECT percentile_approx(cast(substr(src.value,5) AS int), array(0.05,0.5,0.95,0.98)) FROM src
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@src
-POSTHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-06-23_12-44-19_897_625588204506780432/10000
+POSTHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-07-26_14-08-42_578_6317460559415319067/10000
 [26.0,255.5,479.0,491.0]
 PREHOOK: query: SELECT percentile_approx(cast(substr(src.value,5) AS int), array(0.05,0.5,0.95,0.98), 100) FROM src
 PREHOOK: type: QUERY
 PREHOOK: Input: default@src
-PREHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-06-23_12-44-24_513_3382890303984991141/10000
+PREHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-07-26_14-08-47_287_2752385889854385296/10000
 POSTHOOK: query: SELECT percentile_approx(cast(substr(src.value,5) AS int), array(0.05,0.5,0.95,0.98), 100) FROM src
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@src
-POSTHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-06-23_12-44-24_513_3382890303984991141/10000
+POSTHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-07-26_14-08-47_287_2752385889854385296/10000
 [24.07,252.77777777777777,476.9444444444444,487.82]
 PREHOOK: query: SELECT percentile_approx(cast(substr(src.value,5) AS int), array(0.05,0.5,0.95,0.98), 1000) FROM src
 PREHOOK: type: QUERY
 PREHOOK: Input: default@src
-PREHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-06-23_12-44-29_036_9025181836738993015/10000
+PREHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-07-26_14-08-51_922_7991525101468087783/10000
 POSTHOOK: query: SELECT percentile_approx(cast(substr(src.value,5) AS int), array(0.05,0.5,0.95,0.98), 1000) FROM src
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@src
-POSTHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-06-23_12-44-29_036_9025181836738993015/10000
+POSTHOOK: Output: file:/var/folders/7i/7iCDbWRkGHOcgJgX0zscimPXXts/-Tmp-/mlahiri/hive_2010-07-26_14-08-51_922_7991525101468087783/10000
 [26.0,255.5,479.0,491.0]