You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by nz...@apache.org on 2010/11/24 05:41:14 UTC
svn commit: r1038475 - in /hive/trunk: CHANGES.txt
ql/src/test/queries/clientpositive/ops_comparison.q
ql/src/test/results/clientpositive/ops_comparison.q.out
serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java
Author: nzhang
Date: Wed Nov 24 04:41:13 2010
New Revision: 1038475
URL: http://svn.apache.org/viewvc?rev=1038475&view=rev
Log:
HIVE-1809 Hive Comparison Operators are broken for NaN values (Paul Butler via Ning Zhang)
Added:
hive/trunk/ql/src/test/queries/clientpositive/ops_comparison.q
hive/trunk/ql/src/test/results/clientpositive/ops_comparison.q.out
Modified:
hive/trunk/CHANGES.txt
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java
Modified: hive/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hive/trunk/CHANGES.txt?rev=1038475&r1=1038474&r2=1038475&view=diff
==============================================================================
--- hive/trunk/CHANGES.txt (original)
+++ hive/trunk/CHANGES.txt Wed Nov 24 04:41:13 2010
@@ -540,6 +540,9 @@ Trunk - Unreleased
HIVE-1807 No Element found exception in BucketMapJoinOptimizer
(He Yongqiang via Ning Zhang)
+ HIVE-1809 Hive Comparison Operators are broken for NaN values
+ (Paul Butler via Ning Zhang)
+
TESTS
HIVE-1464. improve test query performance
Added: hive/trunk/ql/src/test/queries/clientpositive/ops_comparison.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientpositive/ops_comparison.q?rev=1038475&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientpositive/ops_comparison.q (added)
+++ hive/trunk/ql/src/test/queries/clientpositive/ops_comparison.q Wed Nov 24 04:41:13 2010
@@ -0,0 +1,23 @@
+
+select 1.0 < 2.0 from src limit 1;
+select 2.0 < 2.0 from src limit 1;
+select 2.0 > 1.0 from src limit 1;
+select 2.0 > 2.0 from src limit 1;
+
+select 'NaN' < 2.0 from src limit 1;
+select 1.0 < 'NaN' from src limit 1;
+select 1.0 > 'NaN' from src limit 1;
+select 'NaN' > 2.0 from src limit 1;
+select 'NaN' > 'NaN' from src limit 1;
+select 'NaN' < 'NaN' from src limit 1;
+
+select 'NaN' = 2.0 from src limit 1;
+select 1.0 = 'NaN' from src limit 1;
+select 'NaN' = 2.0 from src limit 1;
+select 'NaN' = 'NaN' from src limit 1;
+
+select 'NaN' <> 2.0 from src limit 1;
+select 1.0 <> 'NaN' from src limit 1;
+select 'NaN' <> 2.0 from src limit 1;
+select 'NaN' <> 'NaN' from src limit 1;
+
Added: hive/trunk/ql/src/test/results/clientpositive/ops_comparison.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/ops_comparison.q.out?rev=1038475&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientpositive/ops_comparison.q.out (added)
+++ hive/trunk/ql/src/test/results/clientpositive/ops_comparison.q.out Wed Nov 24 04:41:13 2010
@@ -0,0 +1,162 @@
+PREHOOK: query: select 1.0 < 2.0 from src limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-36-43_171_8359342299792578494/-mr-10000
+POSTHOOK: query: select 1.0 < 2.0 from src limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-36-43_171_8359342299792578494/-mr-10000
+true
+PREHOOK: query: select 2.0 < 2.0 from src limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-36-47_563_6509004989273547234/-mr-10000
+POSTHOOK: query: select 2.0 < 2.0 from src limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-36-47_563_6509004989273547234/-mr-10000
+false
+PREHOOK: query: select 2.0 > 1.0 from src limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-36-51_147_4921144132913433715/-mr-10000
+POSTHOOK: query: select 2.0 > 1.0 from src limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-36-51_147_4921144132913433715/-mr-10000
+true
+PREHOOK: query: select 2.0 > 2.0 from src limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-36-54_792_405822316321812886/-mr-10000
+POSTHOOK: query: select 2.0 > 2.0 from src limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-36-54_792_405822316321812886/-mr-10000
+false
+PREHOOK: query: select 'NaN' < 2.0 from src limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-36-58_235_6381965909893763309/-mr-10000
+POSTHOOK: query: select 'NaN' < 2.0 from src limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-36-58_235_6381965909893763309/-mr-10000
+false
+PREHOOK: query: select 1.0 < 'NaN' from src limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-01_805_3406552689505838240/-mr-10000
+POSTHOOK: query: select 1.0 < 'NaN' from src limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-01_805_3406552689505838240/-mr-10000
+true
+PREHOOK: query: select 1.0 > 'NaN' from src limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-06_098_3368587280982912415/-mr-10000
+POSTHOOK: query: select 1.0 > 'NaN' from src limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-06_098_3368587280982912415/-mr-10000
+false
+PREHOOK: query: select 'NaN' > 2.0 from src limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-09_598_8795319605305040803/-mr-10000
+POSTHOOK: query: select 'NaN' > 2.0 from src limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-09_598_8795319605305040803/-mr-10000
+true
+PREHOOK: query: select 'NaN' > 'NaN' from src limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-13_054_3393533389220441923/-mr-10000
+POSTHOOK: query: select 'NaN' > 'NaN' from src limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-13_054_3393533389220441923/-mr-10000
+false
+PREHOOK: query: select 'NaN' < 'NaN' from src limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-16_767_6332302817430866113/-mr-10000
+POSTHOOK: query: select 'NaN' < 'NaN' from src limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-16_767_6332302817430866113/-mr-10000
+false
+PREHOOK: query: select 'NaN' = 2.0 from src limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-20_272_3118451494666412808/-mr-10000
+POSTHOOK: query: select 'NaN' = 2.0 from src limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-20_272_3118451494666412808/-mr-10000
+false
+PREHOOK: query: select 1.0 = 'NaN' from src limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-23_936_1948317467590272623/-mr-10000
+POSTHOOK: query: select 1.0 = 'NaN' from src limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-23_936_1948317467590272623/-mr-10000
+false
+PREHOOK: query: select 'NaN' = 2.0 from src limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-27_763_4197853802869223089/-mr-10000
+POSTHOOK: query: select 'NaN' = 2.0 from src limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-27_763_4197853802869223089/-mr-10000
+false
+PREHOOK: query: select 'NaN' = 'NaN' from src limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-31_373_6623902100898132587/-mr-10000
+POSTHOOK: query: select 'NaN' = 'NaN' from src limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-31_373_6623902100898132587/-mr-10000
+true
+PREHOOK: query: select 'NaN' <> 2.0 from src limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-34_888_733814877538910170/-mr-10000
+POSTHOOK: query: select 'NaN' <> 2.0 from src limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-34_888_733814877538910170/-mr-10000
+true
+PREHOOK: query: select 1.0 <> 'NaN' from src limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-38_678_7424470523261520477/-mr-10000
+POSTHOOK: query: select 1.0 <> 'NaN' from src limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-38_678_7424470523261520477/-mr-10000
+true
+PREHOOK: query: select 'NaN' <> 2.0 from src limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-42_137_8062365212971009367/-mr-10000
+POSTHOOK: query: select 'NaN' <> 2.0 from src limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-42_137_8062365212971009367/-mr-10000
+true
+PREHOOK: query: select 'NaN' <> 'NaN' from src limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-45_602_40266132423363774/-mr-10000
+POSTHOOK: query: select 'NaN' <> 'NaN' from src limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-45_602_40266132423363774/-mr-10000
+false
Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java?rev=1038475&r1=1038474&r2=1038475&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java (original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java Wed Nov 24 04:41:13 2010
@@ -564,12 +564,12 @@ public final class ObjectInspectorUtils
case FLOAT: {
float v1 = ((FloatObjectInspector) poi1).get(o1);
float v2 = ((FloatObjectInspector) poi2).get(o2);
- return v1 > v2 ? 1 : (v1 < v2 ? -1 : 0);
+ return Float.compare(v1, v2);
}
case DOUBLE: {
double v1 = ((DoubleObjectInspector) poi1).get(o1);
double v2 = ((DoubleObjectInspector) poi2).get(o2);
- return v1 > v2 ? 1 : (v1 < v2 ? -1 : 0);
+ return Double.compare(v1, v2);
}
case STRING: {
if (poi1.preferWritable() || poi2.preferWritable()) {