diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/sarg/ConvertAstToSearchArg.java b/ql/src/java/org/apache/hadoop/hive/ql/io/sarg/ConvertAstToSearchArg.java index 300ed20..9013084 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/io/sarg/ConvertAstToSearchArg.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/io/sarg/ConvertAstToSearchArg.java @@ -153,10 +153,9 @@ private static Object boxLiteral(ExprNodeConstantDesc constantDesc, return lit.toString(); } case FLOAT: - if (lit instanceof Float || lit instanceof HiveDecimal) { - // converting a float directly to a double causes annoying conversion - // problems - return Double.parseDouble(lit.toString()); + if (lit instanceof HiveDecimal) { + // HiveDecimal -> Float -> Number -> Double + return ((Number)((HiveDecimal) lit).floatValue()).doubleValue(); } else { return ((Number) lit).doubleValue(); } diff --git a/ql/src/test/org/apache/hadoop/hive/ql/io/sarg/TestConvertAstToSearchArg.java b/ql/src/test/org/apache/hadoop/hive/ql/io/sarg/TestConvertAstToSearchArg.java index 29ec89a..93b50a6 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/io/sarg/TestConvertAstToSearchArg.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/io/sarg/TestConvertAstToSearchArg.java @@ -2859,7 +2859,7 @@ public void TestFloatSarg() throws Exception { assertEquals(1, sarg.getLeaves().size()); PredicateLeaf leaf = sarg.getLeaves().get(0); assertEquals(PredicateLeaf.Type.FLOAT, leaf.getType()); - assertEquals("(EQUALS flt 1.1)", leaf.toString()); + assertEquals("(EQUALS flt " + ((Number) 1.1f).doubleValue() + ")", leaf.toString()); } @Test diff --git a/ql/src/test/queries/clientpositive/orc_ppd_basic.q b/ql/src/test/queries/clientpositive/orc_ppd_basic.q index 33076d9..c367848 100644 --- a/ql/src/test/queries/clientpositive/orc_ppd_basic.q +++ b/ql/src/test/queries/clientpositive/orc_ppd_basic.q @@ -175,4 +175,16 @@ select count(*) from orc_ppd where s = "wendy king"; select count(*) from orc_ppd where s = "wendy king" and t < 0; -- INPUT_RECORDS: 100 -select count(*) from orc_ppd where s = "wendy king" and t > 100; \ No newline at end of file +select count(*) from orc_ppd where s = "wendy king" and t > 100; + +set hive.optimize.index.filter=false; +-- when cbo is disabled constant gets converted to HiveDecimal +select count(*) from orc_ppd where f=74.72; +set hive.optimize.index.filter=true; +select count(*) from orc_ppd where f=74.72; + +set hive.cbo.enable=true; +set hive.optimize.index.filter=false; +select count(*) from orc_ppd where f=74.72; +set hive.optimize.index.filter=true; +select count(*) from orc_ppd where f=74.72; diff --git a/ql/src/test/results/clientpositive/llap/orc_ppd_basic.q.out b/ql/src/test/results/clientpositive/llap/orc_ppd_basic.q.out index a5e4e82..aa37ff3 100644 --- a/ql/src/test/results/clientpositive/llap/orc_ppd_basic.q.out +++ b/ql/src/test/results/clientpositive/llap/orc_ppd_basic.q.out @@ -1250,3 +1250,107 @@ Stage-1 LLAP IO COUNTERS: ROWS_EMITTED: 1100 SELECTED_ROWGROUPS: 2 2 +PREHOOK: query: -- when cbo is disabled constant gets converted to HiveDecimal +select count(*) from orc_ppd where f=74.72 +PREHOOK: type: QUERY +PREHOOK: Input: default@orc_ppd +#### A masked pattern was here #### +Stage-1 FILE SYSTEM COUNTERS: + HDFS_BYTES_READ: 5215 + HDFS_BYTES_WRITTEN: 101 + HDFS_READ_OPS: 4 + HDFS_LARGE_READ_OPS: 0 + HDFS_WRITE_OPS: 2 +Stage-1 HIVE COUNTERS: + CREATED_FILES: 1 + DESERIALIZE_ERRORS: 0 + RECORDS_IN_Map_1: 2100 + RECORDS_OUT_0: 1 + RECORDS_OUT_INTERMEDIATE_Map_1: 1 +Stage-1 LLAP IO COUNTERS: + ALLOCATED_BYTES: 262144 + ALLOCATED_USED_BYTES: 8400 + CACHE_HIT_BYTES: 0 + CACHE_MISS_BYTES: 4809 + METADATA_CACHE_HIT: 1 + METADATA_CACHE_MISS: 1 + NUM_DECODED_BATCHES: 3 + NUM_VECTOR_BATCHES: 3 + ROWS_EMITTED: 2100 + SELECTED_ROWGROUPS: 3 +2 +PREHOOK: query: select count(*) from orc_ppd where f=74.72 +PREHOOK: type: QUERY +PREHOOK: Input: default@orc_ppd +#### A masked pattern was here #### +Stage-1 FILE SYSTEM COUNTERS: + HDFS_BYTES_READ: 0 + HDFS_BYTES_WRITTEN: 101 + HDFS_READ_OPS: 2 + HDFS_LARGE_READ_OPS: 0 + HDFS_WRITE_OPS: 2 +Stage-1 HIVE COUNTERS: + CREATED_FILES: 1 + DESERIALIZE_ERRORS: 0 + RECORDS_IN_Map_1: 2100 + RECORDS_OUT_0: 1 + RECORDS_OUT_INTERMEDIATE_Map_1: 1 +Stage-1 LLAP IO COUNTERS: + CACHE_HIT_BYTES: 4809 + CACHE_MISS_BYTES: 0 + METADATA_CACHE_HIT: 2 + NUM_DECODED_BATCHES: 3 + NUM_VECTOR_BATCHES: 3 + ROWS_EMITTED: 2100 + SELECTED_ROWGROUPS: 3 +2 +PREHOOK: query: select count(*) from orc_ppd where f=74.72 +PREHOOK: type: QUERY +PREHOOK: Input: default@orc_ppd +#### A masked pattern was here #### +Stage-1 FILE SYSTEM COUNTERS: + HDFS_BYTES_READ: 0 + HDFS_BYTES_WRITTEN: 101 + HDFS_READ_OPS: 2 + HDFS_LARGE_READ_OPS: 0 + HDFS_WRITE_OPS: 2 +Stage-1 HIVE COUNTERS: + CREATED_FILES: 1 + DESERIALIZE_ERRORS: 0 + RECORDS_IN_Map_1: 2100 + RECORDS_OUT_0: 1 + RECORDS_OUT_INTERMEDIATE_Map_1: 1 +Stage-1 LLAP IO COUNTERS: + CACHE_HIT_BYTES: 4809 + CACHE_MISS_BYTES: 0 + METADATA_CACHE_HIT: 2 + NUM_DECODED_BATCHES: 3 + NUM_VECTOR_BATCHES: 3 + ROWS_EMITTED: 2100 + SELECTED_ROWGROUPS: 3 +2 +PREHOOK: query: select count(*) from orc_ppd where f=74.72 +PREHOOK: type: QUERY +PREHOOK: Input: default@orc_ppd +#### A masked pattern was here #### +Stage-1 FILE SYSTEM COUNTERS: + HDFS_BYTES_READ: 0 + HDFS_BYTES_WRITTEN: 101 + HDFS_READ_OPS: 2 + HDFS_LARGE_READ_OPS: 0 + HDFS_WRITE_OPS: 2 +Stage-1 HIVE COUNTERS: + CREATED_FILES: 1 + DESERIALIZE_ERRORS: 0 + RECORDS_IN_Map_1: 2100 + RECORDS_OUT_0: 1 + RECORDS_OUT_INTERMEDIATE_Map_1: 1 +Stage-1 LLAP IO COUNTERS: + CACHE_HIT_BYTES: 4809 + CACHE_MISS_BYTES: 0 + METADATA_CACHE_HIT: 2 + NUM_DECODED_BATCHES: 3 + NUM_VECTOR_BATCHES: 3 + ROWS_EMITTED: 2100 + SELECTED_ROWGROUPS: 3 +2 diff --git a/ql/src/test/results/clientpositive/tez/orc_ppd_basic.q.out b/ql/src/test/results/clientpositive/tez/orc_ppd_basic.q.out index bfdf66b..4935092 100644 --- a/ql/src/test/results/clientpositive/tez/orc_ppd_basic.q.out +++ b/ql/src/test/results/clientpositive/tez/orc_ppd_basic.q.out @@ -951,3 +951,72 @@ Stage-1 HIVE COUNTERS: RECORDS_OUT_0: 1 RECORDS_OUT_INTERMEDIATE_Map_1: 1 2 +PREHOOK: query: -- when cbo is disabled constant gets converted to HiveDecimal +select count(*) from orc_ppd where f=74.72 +PREHOOK: type: QUERY +PREHOOK: Input: default@orc_ppd +#### A masked pattern was here #### +Stage-1 FILE SYSTEM COUNTERS: + HDFS_BYTES_READ: 21496 + HDFS_BYTES_WRITTEN: 101 + HDFS_READ_OPS: 4 + HDFS_LARGE_READ_OPS: 0 + HDFS_WRITE_OPS: 2 +Stage-1 HIVE COUNTERS: + CREATED_FILES: 1 + DESERIALIZE_ERRORS: 0 + RECORDS_IN_Map_1: 2100 + RECORDS_OUT_0: 1 + RECORDS_OUT_INTERMEDIATE_Map_1: 1 +2 +PREHOOK: query: select count(*) from orc_ppd where f=74.72 +PREHOOK: type: QUERY +PREHOOK: Input: default@orc_ppd +#### A masked pattern was here #### +Stage-1 FILE SYSTEM COUNTERS: + HDFS_BYTES_READ: 23556 + HDFS_BYTES_WRITTEN: 101 + HDFS_READ_OPS: 4 + HDFS_LARGE_READ_OPS: 0 + HDFS_WRITE_OPS: 2 +Stage-1 HIVE COUNTERS: + CREATED_FILES: 1 + DESERIALIZE_ERRORS: 0 + RECORDS_IN_Map_1: 100 + RECORDS_OUT_0: 1 + RECORDS_OUT_INTERMEDIATE_Map_1: 1 +2 +PREHOOK: query: select count(*) from orc_ppd where f=74.72 +PREHOOK: type: QUERY +PREHOOK: Input: default@orc_ppd +#### A masked pattern was here #### +Stage-1 FILE SYSTEM COUNTERS: + HDFS_BYTES_READ: 21496 + HDFS_BYTES_WRITTEN: 101 + HDFS_READ_OPS: 4 + HDFS_LARGE_READ_OPS: 0 + HDFS_WRITE_OPS: 2 +Stage-1 HIVE COUNTERS: + CREATED_FILES: 1 + DESERIALIZE_ERRORS: 0 + RECORDS_IN_Map_1: 2100 + RECORDS_OUT_0: 1 + RECORDS_OUT_INTERMEDIATE_Map_1: 1 +2 +PREHOOK: query: select count(*) from orc_ppd where f=74.72 +PREHOOK: type: QUERY +PREHOOK: Input: default@orc_ppd +#### A masked pattern was here #### +Stage-1 FILE SYSTEM COUNTERS: + HDFS_BYTES_READ: 23556 + HDFS_BYTES_WRITTEN: 101 + HDFS_READ_OPS: 4 + HDFS_LARGE_READ_OPS: 0 + HDFS_WRITE_OPS: 2 +Stage-1 HIVE COUNTERS: + CREATED_FILES: 1 + DESERIALIZE_ERRORS: 0 + RECORDS_IN_Map_1: 100 + RECORDS_OUT_0: 1 + RECORDS_OUT_INTERMEDIATE_Map_1: 1 +2